web-dev-qa-db-ja.com

Python:正規表現に一致する文字列を出力する方法は?

文字列の一部(特定のWord)を照合して印刷したい。 _grep -o_が正確に行うこと。私の言葉は、たとえば「黄色い犬」であり、複数の行にまたがる文字列で見つけることができます。

_[34343] | ****. "Example": <one>, yellow dog
        tstring0 123
        tstring1 456
        tstring2 789
_

この正規表現mydog = re.compile(', .*\n')を試して、一致した単語のみをif mydog.search(string):で出力してみましょう。

出力で「黄色い犬」だけを取得するにはどうすればよいですか?

15
minerals

キャプチャグループとfindallの使用:

>>> import re
>>> s = """[34343] | ****. "Example": <one>, yellow dog
...         tstring0 123
...         tstring1 456
...         tstring2 789"""
>>> mydog = re.compile(', (.*)\n')
>>> mydog.findall(s)
['yellow dog']

最初の一致のみが必要な場合:

>>> mydog.findall(s)[0]
'yellow dog'

注:IndexErrorに一致するものが含まれていない場合は、sを処理する必要があります。

18
Chris Seymour

キャプチャグループを指定しない場合、式全体と一致するテキストはmatchResult.group(0)とともに含まれます。あなたの場合、これは_', yellow dog\n'_になります。 _yellow dow_だけが必要な場合は、キャプチャグループを式, (.*?)\nに追加する必要があります。また、_.*_を_.*?_に変更しました。これにより、貪欲でなくなり、最初の改行が見つかったときに停止します。

_>>> s = '''[34343] | ****. "Example": <one>, yellow dog
        tstring0 123
        tstring1 456
        tstring2 789'''
>>> mydog = re.compile(', (.*?)\n')
>>> matchResult = mydog.search(s)
>>> if matchResult:
        print(matchResult.group(1))

yellow dog
_
5
poke