20

我想匹配字符串的一部分(特定单词)并打印它。究竟是做什么grep -o的。例如,我的词是“yellow dog”,它可以在跨越多行的字符串中找到。

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

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

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

4

2 回答 2

20

使用捕获组和 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'

注意:您需要处理IndexErrorfor whens不包含匹配项。

于 2013-09-12T10:44:00.873 回答
9

如果不指定捕获组,则整个表达式匹配的文本将包含在 withingmatchResult.group(0)中。在你的情况下,这将是', yellow dog\n'. 如果你只想要yellow dow,你应该在表达式中添加一个捕获组:, (.*?)\n。请注意,我还将其更改.*为 a.*?以便它不会贪婪并在找到第一个换行符时停止。

>>> 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
于 2013-09-12T10:42:09.050 回答