regexp.在字符串中查找子字符串

tf7tbtn2  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(125)

我有这样的字符串:
q.0.0.0.1-1111,q.0.0.0.1.tt_0-1111,tes-00.00.000.0 -1111,q.00.00.000.0.xx_0-1111
下一个regexp:
(?:(?〈=[^-\s].\d)|(?〈=[^-\s]{7}))[^-]+(?=-)|(?〈=-)[^-\s]+-
除q.00.00.000.0.xx_0-1111外,它在所有情况下都能正常工作
regexp(?:(?〈=[^-\s]{4}\d\d)的这一部分在字符串q.00.00.000.0.xx_0-1111中查找子字符串,如:
.000.0.xx_0
但是我期望这个regexp找到的是:
.0.xx_0
我的正则表达式中有什么错误,我如何修复它以获得我期望的结果?
会很感激你的帮助。

x4shl7ld

x4shl7ld1#

模式匹配太多,因为第二个交替可以在第一个交替之前匹配,第一个交替需要匹配3个数字。
对于这种情况,您可以使用单词边界来限制第二个Assert,然后Assert一行中没有3位数字:

(?:(?<=[^-\s]{4}\d{3})|\b(?<=[^-\s]{7})(?![.\d]*\d\d\d))[^-]+(?=-)|(?<=-)[^-\s]+-

Regex demo

相关问题