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


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


 这是我的正则表达式:


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



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


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


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


match.groups()

< / pre>&#xA;&#xA;但它没有给我任何回报,而我希望得到一个元组。&#xA;所以我真的不明白为什么它什么也没有返回?
&# XA;
答案 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())