re.groups()什么都不返回

时间:2017-03-10 15:51:49

标签: python regex

我是regex地区的新手!我正在尝试了解群组功能。
这是我的字符串:




  **服务器无法找到mywebdomain.com:NXDOMAIN&#xA ;  




这是我的正则表达式:




  match = re.match(' [*] {2} \ s + server。* NXDOMAIN')
  




以下是我在调试器中看到的匹配值:




  match =“**服务器无法找到testweb.com:NXDOMA>
  

 


所以我试图在这个正则表达式上看到组。




  match.groups()&#xA;  < / pre>&#xA;&#xA; 

但它没有给我任何回报,而我希望得到一个元组。&#xA;所以我真的不明白为什么它什么也没有返回?

&# XA;

2 个答案:

答案 0 :(得分:1)

函数.groups()返回匹配的正则表达式捕获组的结果,在(<expression>)表达式中表示。

在你的表达式[*]{2}\s+server.*NXDOMAIN中,()中没有包含的子表达式可以创建一个捕获组。因此,无论您是否为字符串匹配测试为正,.groups()将始终为空,因为您尚未在RegEx中定义任何捕获组。

另一个问题是,您打电话给re.match()时,您正在指定要测试的表达式,但是您没有传递要测试的字符串...通话的格式为re.match(<expression>, <string>)

如果您真的想要使用捕获组,可以在()中围绕您的表达,并执行...

match = re.match(r'([*]{2}\s+server.*NXDOMAIN)', '** server can\'t find mywebdomain.com: NXDOMAIN')
print(match.groups())
# ("** server can't find mywebdomain.com: NXDOMAIN",)

这会产生tuple您的捕获组结果。

另一种选择是保持你的表达不变,而是使用re.findall函数来获得你的匹配......

result = re.findall(r'[*]{2}\s+server.*NXDOMAIN', '** server can\'t find mywebdomain.com: NXDOMAIN')
print(result)
# ["** server can't find mywebdomain.com: NXDOMAIN"]

...并返回一个数组,其中包含测试字符串中的所有匹配项。

答案 1 :(得分:0)

你必须在你的正则表达式中有一个捕获组()来捕获groups()函数中的匹配项。此外,要匹配的字符串应作为第二个参数传递给match()函数。以下代码应该可以使用。

import re
m = re.match("([*]{2}\s+server.*NXDOMAIN)",
  "** server can\'t find mywebdomain.com: NXDOMAIN")
if m:
  print(m.groups())