2016-07-11 2 views
2

正規表現を使用して特定の文の犬または犬を検索したいと考えています。ここに私が持っているが、それは動作していません。私は特定の単語を検索する必要があります。複数の単語やすべての単語の単数ではありません。特定のPythonの複数形または単数形を検索する正規表現

x = re.findall('(?<=\|)dog[s]?(?=\|)', txt) 
+2

'x = re.findall(r '\ bdogs?\ b'、txt)' –

+0

クラスに1文字を入れる必要はありません。 'dogs?'は問題ありません。 – Jan

+0

ああ、そう?最後の文字のみを使用しますか?なんらかの理由で、私はそれが単語全体を使用すると思った。ありがとうございました –

答えて

2

量子は、左側の原子に適用されます。グループの場合は、グループに適用されます。リテラルシンボルの場合は、このシンボルに適用されます。

したがって、s?は、1または0と一致します。s

使用

\bは、ワード境界であり、 sはオプションです
x = re.findall(r'\bdogs?\b', txt) 

注:特別な正規表現メタキャラクタのエスケープに関連する問題を避けるために、生の文字列リテラルを使用して正規表現パターンを定義することが推奨されます。

+0

'? 'はデフォルトでgreedyですと付け加えたいかもしれません。 – Jan

+0

技術的にはJanが私の問題を解決しました。私はそれが最後のユニットだけでなく、ユニット全体をグループ化すると思った。 –

+1

@Jan:貪欲な '?'(1つまたはゼロ)と遅延の '' '(0または1)は、パターンが末尾の単語境界に固定されているため、ここで同じ動作をします。 ['\ bdogs?\ b'](https://regex101.com/r/wD3dB5/1)と[' \ bdogs ?? \ b'](https://regex101.com/r/wD3dB5/2) )。 –

関連する問題