Python:如何打印正则表达式匹配的字符串?

min*_*als 13 python regex python-2.7

我想匹配字符串的一部分(一个特定的单词)并打印出来.究竟是什么呢grep -o.我的话就是"黄狗",它可以在一个跨越多行的字符串中找到.

[34343] | ****. "Example": <one>, yellow dog
        tstring0 123
        tstring1 456
        tstring2 789
Run Code Online (Sandbox Code Playgroud)

让我们试试这个正则表达式mydog = re.compile(', .*\n') ,然后 if mydog.search(string):只打印匹配的单词.

如何在输出中只获得"黄狗"?

Chr*_*our 19

使用捕获组并查找:

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

如果您只想要第一场比赛,那么:

>>> mydog.findall(s)[0]
'yellow dog'
Run Code Online (Sandbox Code Playgroud)

注意:您希望IndexErrors不包含匹配项时处理for .


pok*_*oke 5

如果您未指定捕获组,则与整个表达式匹配的文本将包含with 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
Run Code Online (Sandbox Code Playgroud)