如何在python 3中打印正则表达式匹配结果?

时间:2014-10-18 09:41:44

标签: python regex python-3.x match

我在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 个答案:

答案 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到模式中的许多组。默认参数用于未参加比赛的组;默认为无。

因此,要获取ccc8并仅显示它们,可以使用

import re
reg = re.compile("([a-z]+)(8?)")
s = "ccc8"
m = reg.match(s)
if m:
  print(m.groups()) # => ('ccc', '8')

请参见Python demo