python - 模式匹配检查大于符号前面是否没有小于符号

标签 python regex pattern-matching

我想检查大于号前面是否有小于号。 我真正需要的是检查 > 和 < 之间是否有多个由空格分隔的单词。

例如:

<a v >

应该能找到,因为里面不止一个“字”

还有这个:

< a > 

不应该

这是我的python代码

text = '<a > b'
if re.search('(?<!\<)[a-zA-Z0-9_ ]+>',text):   # search for '>'
   print "found a match"

对于这段文字,我不希望它匹配,因为前面有一个比符号小的符号。 但它确实找到了匹配项。 Negative Lookbehind似乎不起作用。

解决方案(kindof): 这也会找到前面没有大于符号的小于符号

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

最佳答案

匹配是:a >。此部分与您的正则表达式完美匹配 - 它不是以 < 开头,然后是“a”,它与方括号中的位匹配,然后是 >。

您要匹配整个字符串吗?如果是,请尝试使用 re.match 而不是 re.search

或者您可能想试试这段代码。它会搜索可能以 < 开头的子字符串,然后判断它是否确实如此。

text = '<a > b'
match = re.search('<?[a-zA-Z0-9_ ]+>',text)

if ((match) and (match.group(0)[0] != '<')):
  # Match found

关于python - 模式匹配检查大于符号前面是否没有小于符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401263/

相关文章:

macros - Clojure 简单模式匹配

algorithm - 'n' 人使用 Go 的桥梁和 torch 问题

python - 将文本从 jira 转换为 Markdown

python - Tensorboard 无法导入名称 `run_main`

regex - R:查找数字是否在字符串范围内

java - 如何在 java 中的字符串中找到 '|' 模式?

Python:set.pop() 的用例是什么?

python - sge-pygame 旋转父子 Sprite

C++11 VS12 regex_search

java - Java中正则表达式的部分匹配