2016-06-15 25 views
0

私はいくつかのテキストファイルの単語に文法のカテゴリを割り当てるpythonスクリプトを書いています。各テキストファイルには、角括弧<>内にファイルヘッダーがあります。テキスト全体には、タイムスタンプ、ページ番号、転記者からの質問などの情報を含む追加の行もあります。私はこれらの行を削除したい。そこヘッダの同じ数が他の<>材料が変化し、各ファイル内にあるので、私は特定の行を排除することはできませんにもかかわらずPython、正規表現で角括弧内の行を削除する

<title  Titipuru Supay> 
<speaker name> 
<sex  female> 
<dialect Pastaza> 
<register narrative> 
<contributor name> 

chan; payguna serenkya man chiga; 
<ima?> 
payguna kirina man, chiga, mana 
shayachira; ninagunan shi tujsirani nira: 
illaparani nira shi illapay 
<173> 
pasasha, ima shi kasna nin, nisha, 

:これは、テキストファイルがどのように見えるか、基本的です。だから私は<のすべてを取り除き、括弧を含むre.sub文のような単純なものを試してみると思った。

with open(file, encoding='utf-8') as file_in: 
     text = file_in.read() 
     re.sub(r"<.*>", " ", text) 

私はpythex.orgに*>。<を試してみましたが、それはテスト文字列との両方の場所で働いていたregex101はなく、私のスクリプトで(はい、私はインポートの再を持っています)。私はまた、次のような他のソリューションを試しました:

私はちょうど正当な正規表現を取得していないまたはここに何か深い?

+3

を参照してください?あなたは 're.sub()'の結果をどこかに残しましたか? - それは動作しません - 新しい文字列を生成します。 – alecxe

+0

出力の下にprint(text)文を追加しましたが、すべての<>材料がまだ残っていることがわかりました – Wangana

+1

'text = re.sub(r" <[^> * * "" "" text ) '。そうでない場合は、テストするテキストを追加してください。 –

答えて

1

について私たちに多くの情報を記入してください、あなたは同じ行に複数の<...>を有することができます。この場合、あなたは否定文字クラスのソリューションとはるかに安全です:

text = re.sub(r"<[^>]*>", " ", text) 

text変数、Pythonの文字列は不変で、もちろん、更新されるべきである、と正規表現は今<をマッチングされ、その後、ゼロか>以外の文字以上、>以外の文字。

は、あなたはそれが機能していません知っていますどのようにregex demo

Regular expression visualization

+0

さて、私はそのための担当者を務めましたが、もはや私は戻ってきて、15歳まで戻ってきたときにあなたの答えを投票します。 – Wangana

4

文字列は固定ではありません。は変更できないため、再割り当てされません。 re.sub(...)は機能していますが、新しい文字列が返されます。これを試してみてください:これはまだ動作しない場合

text = re.sub(r"<.*>", " ", text) 

、私が理解から、あなたの問題

+1

これは私が書いていた解決策です。 re.subは入力された文字列を置き換えるのではなく、新しい文字列を返すので、行を別のものに置き換える必要があります。 – HMSCelestia

+0

Ooops、ええ、私はテキスト=を忘れていたと思うが、私はそれをして、ほとんど働いた、私はまだ最初の括弧を使って、ここにそこに現れるヘッダーの断片を持っている: 。 <14:46 – Wangana

+0

@AlexR。、テストすることができないように動作しない例を教えてください。 – Brian

関連する問題