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

2024-09-24 02:18:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想匹配字符串的一部分(一个特定的单词)并打印出来。正是grep -o所做的。 例如,我的单词是“黄狗”,它可以在跨越多行的字符串中找到。

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

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

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


Tags: 字符串researchifexample单词onegrep
2条回答

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

注意:如果s不包含匹配项,则需要处理IndexError

如果不指定捕获组,则与整个表达式匹配的文本将包含在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

相关问题 更多 >