Python正则表达式否定



下面是几个示例字符串

as-jfk-interface-module-trojan-7.100.110-12350009

network-refresh-core-3.3.909-99950009

network-challenge7-7-ui-module-8.23.590-12350009

和我使用以下正则表达式来获取字符串的版本部分,如7.100.110-12350009

正则表达式:

(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*)))?(?:-([w][w.-_]*))?)?

当试图通过否定匹配as-jfk-interface-module-trojannetwork-challenge7-7-ui-module等单词部分时,[^(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*)))?(?:-([w][w.-_]*))?)?],它说无效正则表达式:不平衡括号

st = "as-jfk-interface-module-trojan-7.100.110-12350009"
pattern = "(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*))(?:.(0|(?:[1-9]d*)))?(?:-([w][w.-_]*))?)?"
re.search(pattern, st)

我做错了什么?

一个否定的字符类不是这样工作的!

[^abc][^cba]完全相同,表示匹配一个不是abc的字符。这并不意味着:不匹配abc

要获取单词部分,您可以使用

r"[a-zd-]+(?=-d.)"

如果您正在使用VScode,请安装"reg exp解释"插件。它将以图形化的方式显示您的reg exp,并可以看到哪里出了问题。

最新更新