我在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>
有人能告诉我如何实际打印结果吗?
答案 0 :(得分:9)
您需要在.group()
函数之后添加match
,以便打印匹配的字符串,否则仅显示匹配是否发生。要打印捕获组捕获的字符,您需要将相应的组索引传递给.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;请注意,这与零长度匹配不同。
请注意,即使在MULTILINE模式下,re.match()也只会匹配字符串的开头而不是每行的开头。
答案 1 :(得分:0)
如果您需要获取整个匹配值,则应使用
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