请考虑以下示例
line="18/11/1992"
这是我写的程序。请注意我用过的正则表达式尝试匹配上面的行
matchob1 = re.search(r'([\w+\/+])',line)
matchob2 = re.search(r'([\w\/]+)',line) if matchob1 != None :
print('The match produced the following info for matchob1 - '+matchob1.group(1))
else:
print('Sorry no match found in the line : '+str(line)+' for matchob1')
if matchob2 != None :
print('The match produced the following info for matchob2 - '+matchob2.group(1))
else:
print('Sorry no match found in the line : '+str(line)+' for matchob2')
当我运行脚本时,我得到了以下输出
The match produced the following info for matchob2 - 1
The match produced the following info for matchob1 - 18/11/1992
我想知道我的理解是否正确
第一个正则表达式只匹配1,因为它在[]范围内查找\ w +或/ +。
第二个正则表达式查找单词(\ w +)或/(/ +)后跟范围[]内任意数量的模式。我的理解是正确的还是有人能给我一个更明确的答案来帮助我更好地理解这一点?
答案 0 :(得分:0)
[\w+\/+]
匹配给定列表中的单个字符,即匹配单词字符或+
或/
。像[+++]
或[+]
这样的字符类
将匹配所有文字+
符号。因此,您不需要在角色类中重复两次相同的模式。
[\w\/]+
+
将在字符类中重复一次或多次模式。因此,这将匹配单词字符或/
一次或多次。 ()
称为捕获组。
答案 1 :(得分:0)
The match produced the following info for matchob2 - 1
因为您提到的字符类只匹配一个字符,因为您没有量化它。所以它匹配第一个字符1
。
注意:字符类中的+
会失去特殊的量化能力。
The match produced the following info for matchob1 - 18/11/1992
因为它与space
无法匹配,所以它与任何包含\
的字词匹配。