我有几个字符串:
问题0.0.0.1 -1111,q.0.0.0.1.tt:
我有regexp来裁剪它们:
r'(?〈=[^-\s]{7})[^-]+(?=-)|(?〈=-)[^-\s]+-'
它将字符串从7个字符切到-。
并得到了预期的结果:
q.0.0.0-1111、q.0.0.0-1111、tes-1111
但是当我有字符串像:
q.0.00.0.0-1111,q.0.00.0.0.tt_0-1111
它regexp错误地切断了这个sting。
q.0.00.-1111,q.0.00.-1111,但我预期q.0.00-1111
我知道这部分代码的问题
r'(?〈=[^-\s]***{7}***)[^-]+(?=-)|(?〈=-)[^-\s]+-'
- —————————————-^
如何检查字符串中4个字符后的字符数,如果字符数大于1,则将{7}更改为6
1条答案
按热度按时间xlpyo6sf1#
你可以使用一个替代的lookbehind来添加Assert4个字符,而不是
-
或一个空格字符后跟2个数字:模式匹配:
(?:
2个备选方案的非捕获组(?<=[^-\s]{4}\d\d)
声明除-
以外的4个字符或左边的一个空格字符,后跟2位数字|
或(?<=[^-\s]{7})
声明除-
以外的7个字符或左侧的一个空格字符)
关闭非捕获组[^-]+(?=-)
|
或(?<=-)[^-\s]+-
向左Assert-
并匹配除-
以外的1+个字符和一个空格字符,后跟匹配-
Regex demo