【发布时间】:2015-01-26 19:19:42
【问题描述】:
我正在尝试在 Python 中开发一个否定的前瞻正则表达式来匹配不匹配的 xml 样式标签。我有两个字符串:
1) <TIMESTART>11:00</TIMEXSTART>. </bye> <TIMEX>not in december</TIMEX>
2) <TIMESTART>11:00</TIMEXSTART>. <TIMEX>not in december</TIMEX>
正则表达式应该匹配
</bye> in the first sentence but nothing in the second one
目前我有
re.compile(r'<\s*\/\s*[^>]*>.*?((?:<\s*\/\s*.*?>))')
但它总是匹配第二个结束标签。我尝试了否定的前瞻,但它不起作用,它与第二句中的最后一个结束标记 (TIMEX) 匹配:
re.compile(r'<\s*\/\s*[^>]*>^(?!<\s*\/\s*.*?>).*?((?:<\s*\/\s*.*?>))')
编辑:这效果更好,但它仍然无法捕捉到字符串以如下结尾的情况:
....</tag1> </tag2>
re.compile(r'<\s*\/\s*[^>]*>(?!<\s*\/\s*.*?>).*?((?:<\s*\/\s*.*?>)).*?((?:<\s*[^\/]\s*.*?>))')
【问题讨论】:
-
为什么你不想匹配
</TIMEXSTART>?unmatched xml style tags是什么意思? -
那是被错误复制的原始字符串的子字符串。现在已更正。
-
您能解释一下为什么不使用解析器吗? (除了“我没有时间了解它是如何工作的”)
-
你能纠正这个
<TIMESTART>11:00</TIMEXSTART>吗?
标签: python regex negative-lookahead