2017-06-17 8 views
0

私の言葉ファイルには、[SWS_Rte_01252] |、[SWS_Rte_01253] |と異なる番号を持ついくつかの要件が含まれています。これらの要件をすべて(SWS_Rte_01252、SWS_Rte_01253)このためのPythonスクリプトが、それは正常に動作していない、この問題の任意の提案?正規表現を使用して要件を取得する

import re 
import docx 
regex = r"\\[SWS_Rte_*\\]\\ \\|" 
doc = docx.Document('selection5.docx') 
f = open('Res.txt',"w") 
for para in doc.paragraphs: 
    line = para.text 
    if re.match(regex, line): 
     str = line[line.index('[') : line.index(']')] 
     f.write(str+'\n') 
+0

何をしようとしているのか詳しく教えてください。最小、完全、および検証可能な例を作成するには、ここをクリックしてください:https://stackoverflow.com/help/mcve –

答えて

0

あなたの正規表現に問題があると思います。試してみてください...

\[[A-Z]{3,}_[A-Za-z]{3,}_\d+\]\s\| 

「[SwsRt_Rhtte_552663] |」のようなものを取得したい場合は、これを使用してください..

\[\w+_\w+_\d+\]\s\| 

[SWS_Rte_ *] |

\[SWS_Rte_\d+\]\s\| 
0

正規表現が正しくありません。特殊文字をエスケープしたいときは、バックスラッシュ\を使うべきです。 \\と書いてあります。つまり、バックスラッシュをエスケープしようとしています。つまり、バックスラッシュにマッチさせようとしています。あなたの問題のため

正しい正規表現は次のようになります。

regex = r"\[SWS_Rte_[0-9]+\]" 

あなたがマッチした値にアクセスしたい場合、あなたは、参照をバック使用する必要がありますつまり、正規表現を変更し、取り出したいものを中心に、通常のブラケットを追加します。

regex = r"\[(SWS_Rte_[0-9]+)\]" 

正規表現にマッチした後、regex.group(1)に一致する正規表現を抽出することができます。バックリファレンスの詳細については、hereを参照してください。

注:正規表現のドキュメントをチェックするとまた

、あなたは違いを見るため、代わりにre.matchre.searchを使用する必要があります。 re.matchため

ドキュメント:文字列の先頭で0個以上の文字が 正規表現パターンに一致する場合

、対応するMatchObject インスタンスを返します。文字列がパターンと一致しない場合はNoneを返します。ノート は、これが長さゼロのマッチとは異なることに注意してください。

re.searchのドキュメント:正規 発現パターンはマッチを生成する第1の位置を探して、文字列を介して

スキャン、及び、対応する するMatchObjectインスタンスを返します。文字列内の位置がパターンと一致しない場合はNoneを返します。 パターン。これは、文字列のある点でゼロ長の が見つかるのとは異なることに注意してください。

関連する問題