如何在Python 3中打印正则匹配结果?
我在IDLE这个环境里,想用正则表达式来处理一个字符串。但是当我按照网上教程输入代码时,结果只打印出了:
<_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>
有没有人能告诉我怎么才能把结果打印出来呢?
2 个回答
1
如果你想要获取整个匹配的值,你应该使用
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
如果你想提取正则表达式匹配中的一部分,就需要在你的正则表达式中使用捕获组。把这些模式用一对没有转义的括号括起来。
如果只想打印捕获组的结果,可以使用Match.groups
:
这个方法会返回一个包含所有匹配子组的元组,从第1组开始,直到模式中有多少组。默认情况下,对于没有参与匹配的组,返回值是None。
所以,如果你想得到ccc
和8
并且只显示这些,你可以使用
import re
reg = re.compile("([a-z]+)(8?)")
s = "ccc8"
m = reg.match(s)
if m:
print(m.groups()) # => ('ccc', '8')
可以查看这个Python示例
17
在使用 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(pattern, string, flags=0)
如果字符串开头的零个或多个字符与正则表达式模式匹配,就会返回一个对应的 MatchObject 实例。如果字符串与模式不匹配,则返回 None;注意,这与零长度的匹配是不同的。
需要注意的是,即使在多行模式下,re.match() 也只会在字符串的开头进行匹配,而不会在每一行的开头进行匹配。