2017-01-17 7 views
1

私はここで正規表現に関する多くの質問を行ってきましたが、それらのアドバイスを使用しましたが、コードを実行することができません。私は、文字列のリストを持っている、と私は以下のパターンのいずれかが含まれ、このリスト内のエントリを見つけようとしています:Regexを使って部分文字列を検索する文字列のリストPython

  • BLANK
  • BLANKにのBLANK
  • BLANKのBLANK BLANK
  • BLANK
  • のBLANKのBLANK
  • BLANKのBLANK
  • のBLANK
  • BLANKのBLANK
  • 例えばBLANK

のBLANK、私は「医者の馬鹿」などの句含んで文章を見つけることができるはずです「学生のハードワーカー。」

これが見つかったら、この基準を満たす文のリストを作成したいと思います。これまでのところ、これは私のコードです:

for sentence in sentences: 
    matched = re.search(r"a [.*]of a " \ 
         r"an [.*]of an " \ 
         r"a [.*]of an" \ 
         r"an [.*]of a " \ 
         r"that [.*]of a " \ 
         r"that [.*]of an " \ 
         r"the [.*]of a " \ 
         r"the [.*]of an ", sentence) 
    if matched: 
     bnp.append(matched) 

#Below two lines for testing purposes only 
print(matched) 
print(bnp) 

このコードは、リスト内の基準を満たさなければならないフレーズがあるという事実にもかかわらず、何の結果をアップなりません。

+0

:このタスクを達成するための単純な正規表現は、何かのようになります[を。*] ''、前の正規表現のチュートリアルを読むのに時間がかかり、ランダムなものをしようとしません。 –

+0

私は[。*]は任意の長さの部分文字列を任意の文字で検索させると考えました。これを誤解しましたか? –

+0

大括弧は単一の文字をマッチさせるために使用され、代わりに '(。*)'を使用します – Navidad20

答えて

1

[.*]は文字クラスであるので、あなたが実際にre'sドキュメントから引用し、ドットや星の文字に一致するようにregexを求めている:文字のセットを示すために使用

[]

。セット内:

文字は個別にリストすることができます。 [amk]は 'a'、 'm'、または 'k'に一致します。

(th(at|e)|a[n]?)\b.*\b(a[n]?)\b.*

この式はどちらか、その、または、その後、任意の文字に一致するようにしようとします:

...

ので、ここでそれを行うための一つの方法です〜には〜または〜があります。

ここではlinkには、そのプロセスのデモンストレーションがあります。ここ

そして、実際のデモンストレーションです:

>>> import re 
>>> 
>>> regex = r"(th(at|e)|a[n]?)\b.*\b(a[n]?)\b.*" 
>>> test_str = ("an idiot of a doctor\n" 
    "the hard-worker of a student.\n" 
    "an BLANK of an BLANK\n" 
    "a BLANK of an BLANK\n" 
    "an BLANK of a BLANK\n" 
    "that BLANK of a BLANK\n" 
    "the BLANK of a BLANK\n" 
    "the BLANK of an BLANK\n") 
>>> 
>>> matches = re.finditer(regex, test_str, re.MULTILINE | re.IGNORECASE) 
>>> 
>>> for m in matches: 
     print(m.group()) 


an idiot of a doctor 
the hard-worker of a student. 
an BLANK of an BLANK 
a BLANK of an BLANK 
an BLANK of a BLANK 
that BLANK of a BLANK 
the BLANK of a BLANK 
the BLANK of an BLANK 
+0

これはすばらしい仕事でした。 –

1

現状では、このコードは、それらの間には事業者と1つの長い文字列にあなたのパターンパラメータを連結します。実際に正規表現 "a [。*]のa [。*]を検索しています..."

あなたは 'or'演算子がありません:|。なぜあなたは物事のこの種の書き込みん

(a|an|that|the) \b.*\b of (a|an) \b.*\b 
関連する問題