Python:如何打印正则表达式匹配的字符串?
Posted
技术标签:
【中文标题】Python:如何打印正则表达式匹配的字符串?【英文标题】:Python: How to print a regex matched string? 【发布时间】:2013-09-16 16:48:38 【问题描述】:我想匹配字符串的一部分(一个特定的单词)并打印出来。正是grep -o
所做的。
例如,我的词是“yellow dog”,它可以在跨越多行的字符串中找到。
[34343] | ****. "Example": <one>, yellow dog
tstring0 123
tstring1 456
tstring2 789
让我们试试这个正则表达式mydog = re.compile(', .*\n')
然后
if mydog.search(string):
仅打印匹配的单词。
如何在输出中只得到“yellow dog”?
【问题讨论】:
【参考方案1】:使用捕获组和 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
。
【讨论】:
【参考方案2】:如果不指定捕获组,则整个表达式匹配的文本将包含在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
【讨论】:
以上是关于Python:如何打印正则表达式匹配的字符串?的主要内容,如果未能解决你的问题,请参考以下文章