1

私はまだ Python 広告の正規表現を使ってロープを学んでいるので、助けが必要です! 文から特定の単語を検索できる正規表現が必要です。1 つの単語を検索するパターンを作成できましたが、検索する必要がある他の単語を取得するにはどうすればよいですか? これを行うと re パターンはどのようになりますか?

>>> question = "the total number of staff in 30?"
>>> re_pattern = r'\btotal.*?\b'
>>> m = re.findall(re_pattern, question)
['total']

「total」と「staff」という言葉を探す必要があります ありがとうマイク

4

3 に答える 3

8

ユニオン演算子|を使用して、検索する必要があるすべての単語を検索します。

In [20]: re_pattern = r'\b(?:total|staff)\b'

In [21]: re.findall(re_pattern, question)
Out[21]: ['total', 'staff']

これは、上記の例に最もよく一致します。ただし、このアプローチは、単語の先頭または末尾に追加された他の文字がない場合にのみ機能します。これは主文節と従属文節の最後によく見られ、コンマ、ドット、感嘆符、または疑問符が文節の最後の単語に追加されます。

例えば、あなたのスタッフは何人ですか?上記のアプローチでは、 staff の末尾に単語境界がないため、staff という単語が見つかりませ。代わりに、疑問符があります。しかし、上記の正規表現の最後の 2 番目を省略すると、式は部分文字列内の単語 ( total in total や totalitiesなど)を誤って検出します。\b

目的を達成するための最良の方法は、最初に文内のすべての英数字を抽出してから、次のリストを検索して必要な単語を見つけることです。

In [51]: def find_all_words(words, sentence):
....:     all_words = re.findall(r'\w+', sentence)
....:     words_found = []
....:     for word in words:
....:         if word in all_words:
....:             words_found.append(word)
....:     return words_found

In [52]: print find_all_words(['total', 'staff'], 'The total number of staff in 30?')
['total', 'staff'] 

In [53]: print find_all_words(['total', 'staff'], 'My staff is totally overworked.')
['staff']
于 2012-12-17T11:47:32.370 に答える
2
question = "the total number of staff in 30?"
find=["total","staff"]
words=re.findall("\w+",question)
result=[x for x in find if x in words]
result
['total', 'staff']
于 2012-12-17T12:04:12.907 に答える
1

Regex 以外のものを使用したいと思ったことはありませんか?

これを検討し、うまくいく場合はこのソリューションから展開してください

>>> 'total' in question.split()
True

同様に

>>> words = {'total','staff'}
>>> [e   for e in words if e in question.split()]
['total', 'staff']
于 2012-12-17T11:47:37.257 に答える