Python 2(使用re模块)。
我想在一个字符串中找到这些匹配项,例如'< / lt;< />< 52>'...但我还想检查这些匹配是否构成整个字符串(来自正则表达式模式的NB你也可以看到'< 66 />'是另一种可接受的模式。)
match_obj_iter = re.finditer( ur'(</?\d+>)|(<\d+/>)', str )
for match_obj in match_obj_iter:
print( '# match found: group |%s|' % ( match_obj.group() ) )
当然,一种方法是在每次迭代时检查match_obj的结尾=前一个match_obj的开始......第一个是0,最后一个是len(str)。
我只是想知道是否有更好的正则表达式程序(例如,如果我不需要特别迭代匹配)。
答案 0 :(得分:1)
你可以通过你的正则表达式来检查它,并检查这是你的字符串的开头和结尾之间唯一存在的东西:
if re.match(ur'^((</?\d+>)|(<\d+/>))+$', str):
print 'Matches the whole string'
else:
print 'Doesn\'t match the whole string'
答案 1 :(得分:0)
您可以修改正则表达式来执行此操作:
re.match(ur'^(?:(?:</?\d+>)|(?:<\d+/>))+$', str)
仅当字符串由(</?\d+>)|(<\d+/>)
的一个或多个匹配组成且字符串中没有其他字符时才匹配。
要查找0或更多内容,只需将+
替换为*
:
re.match(ur'^(?:(?:</?\d+>)|(?:<\d+/>))*$', str)
请注意,我将像(group)
这样的捕获组替换为非捕获组,例如(?:group)
,这样可以节省内存并使这样的布尔匹配更快。