如何在 python 3 中打印正则表达式匹配结果?
Posted
技术标签:
【中文标题】如何在 python 3 中打印正则表达式匹配结果?【英文标题】:How to print regex match results in python 3? 【发布时间】:2014-12-13 19:46:07 【问题描述】:我当时处于空闲状态,并决定使用正则表达式来整理一个字符串。但是当我输入在线教程告诉我的内容时,它所要做的就是打印:
<_sre.SRE_Match object at 0x00000000031D7E68>
完整程序:
import re
reg = re.compile("[a-z]+8?")
str = "ccc8"
print(reg.match(str))
结果:
<_sre.SRE_Match object at 0x00000000031D7ED0>
谁能告诉我如何实际打印结果?
【问题讨论】:
试试print(reg.match(str).group())
【参考方案1】:
您需要在match
函数之后包含.group()
,以便它打印匹配的字符串,否则它只显示匹配是否发生。要打印捕获组捕获的字符,您需要将相应的组索引传递给.group()
函数。
>>> import re
>>> reg = re.compile("[a-z]+8?")
>>> str = "ccc8"
>>> print(reg.match(str).group())
ccc8
带有捕获组的正则表达式。
>>> reg = re.compile("([a-z]+)8?")
>>> print(reg.match(str).group(1))
ccc
re.match(模式、字符串、标志=0)
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的 MatchObject 实例。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。
请注意,即使在 MULTILINE 模式下,re.match() 也只会匹配字符串的开头,而不是每行的开头。
【讨论】:
问题是,当没有匹配时我得到 ** "AttributeError: 'NoneType' object has no attribute 'group'"**【参考方案2】:如果你需要获取整个匹配值,你应该使用
m = reg.match(r"[a-z]+8?", text)
if m: # Always check if a match occurred to avoid NoneType issues
print(m.group()) # Print the match string
如果您需要提取正则表达式匹配的一部分,您需要在正则表达式中使用capturing groups。用一对未转义的括号将这些模式括起来。
要仅打印捕获的组结果,请使用 Match.groups
:
返回一个包含匹配的所有子组的元组,从 1 到模式中的任何组。默认参数用于未参加比赛的组;它默认为无。
所以,要获取 ccc
和 8
并仅显示它们,您可以使用
import re
reg = re.compile("([a-z]+)(8?)")
s = "ccc8"
m = reg.match(s)
if m:
print(m.groups()) # => ('ccc', '8')
见Python demo
【讨论】:
以上是关于如何在 python 3 中打印正则表达式匹配结果?的主要内容,如果未能解决你的问题,请参考以下文章
Python - 使用正则表达式查找多个匹配项并将它们打印出来[重复]