我很难理解这个表达方式:
/((?<!=0)x2)/
尝试匹配&#34; x2&#34;在&#34; 0x2 - 2x = 1&#34;
的字符串上目标是回顾&#34; x2&#34;并检查它是否是&#34; 0&#34;然后避免选择它。 如果只是&#34; x2&#34;然后我想要它被选中。 (例如字符串&#34; x2 - 3x = 4&#34;)
我已经尝试了两种方式,使用正/负前瞻/后方,并始终保持与零(0)匹配。
任何人都可以对这可能发生的原因有所了解吗?
我正在使用https://regex101.com/来测试它(选择了Python选项)。
我认为这是对的:
?<!=
如果它们位于实际匹配exp之前,则需要排除以下符号?
答案 0 :(得分:1)
这里使用的格式有一些问题是javascript而不是python,你不需要前导/尾随/
/((?<!=0)x2)/
我们到达
((?<!=0)x2)
了解环顾四周
Positive Negative
Look ahead (?= (?!
Look Behind (?<= (?<!
所以我们到了
((?<!0)x2)
然后围绕()仍有一些冗余,你需要它在完全匹配中分离组,所以简化它
(?<!0)x2
工作演示here。
答案 1 :(得分:0)
如果它只是“ x2 ”,那么我希望它被选中
如果x2
被认为是一个单独的子字符串 - 请使用以下正则表达式模式:
(?!<0)\b(x2)
答案 2 :(得分:0)
你很亲密;但是,在Python中,负面的后视只是?<!
,没有=
:
import re
s = "0x2 - 2x = 1"
if re.findall("(?<!0)x2", s):
print("no zero as a coefficient")
else:
print('found zero as coefficient')