如何在Python 3中打印正则匹配结果?

12 投票
2 回答
32051 浏览
提问于 2025-04-28 06:13

我在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。

所以,如果你想得到ccc8并且只显示这些,你可以使用

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() 也只会在字符串的开头进行匹配,而不会在每一行的开头进行匹配。

撰写回答