我希望检查大于号是否在小于号之前。实际上我需要检查在 > 和 < 之间是否有超过一个空格分隔的单词。
例如:
例如:
<a v >
应该会被找到,因为里面有多个“word”
以及这个:
< a >
不应该
这是我的Python代码
text = '<a > b'
if re.search('(?<!\<)[a-zA-Z0-9_ ]+>',text): # search for '>'
print "found a match"
对于这段文本,我不希望它匹配,因为前面有一个小于号。 但它确实找到了匹配项。 负向后瞻 似乎无法正常工作。
解决方案(有点): 这也会找到没有大于号前缀的小于符号。
match = re.search('<?[a-zA-Z0-9_ ]+>',text)
if ((match) and (match.group(0)[0] != '<')):
print "found >"
match = re.search('<[a-zA-Z0-9_ ]+>?',text)
if ((match) and (match.group(0)[len(match.group(0))-1] != '>')):
print "found <"
感谢homson_matt提供的解决方案。
更好的解决方案:
在查找大于和小于符号之前替换导致问题的字符串。
# replace all templates from source hunk ( <TEMPLATE> )
srcString = re.sub("<[ ]*[a-zA-Z0-9_\*:/\.]+[ ]*>", "TEMPLATE", srcString)
if re.search('[a-zA-Z0-9_ )]>',srcString): # search for '>'
return True
if re.search('<[a-zA-Z0-9_ (]',srcString): # search for '<'
return True
search
搜索字符串中与表达式匹配的位置。>
匹配。您只是想验证文本中是否没有< >
序列吗? - Felix Kling'(?<!\<)[a-zA-Z0-9_ ]+>'
模式应该是re.search('(?!<\<)[a-zA-Z0-9_ ]+>',text)
,即!
字符应该在<
字符之前。 - tzot(?<!\<)
是正确的。唯一错误的是不必要的反斜杠,但这并不会有任何影响。(?!<\<)
是对<<
的负向前瞻。 - Alan Moore