下面是几个示例字符串
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-trojan
或network-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]
完全相同,表示匹配一个不是a
、b
或c
的字符。这并不意味着:不匹配abc
。
要获取单词部分,您可以使用
r"[a-zd-]+(?=-d.)"
如果您正在使用VScode,请安装"reg exp解释"插件。它将以图形化的方式显示您的reg exp,并可以看到哪里出了问题。