regex 如何检查某个字符后的字符数

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

我有几个字符串:
问题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
xlpyo6sf

xlpyo6sf1#

你可以使用一个替代的lookbehind来添加Assert4个字符,而不是-或一个空格字符后跟2个数字:

(?:(?<=[^-\s]{4}\d\d)|(?<=[^-\s]{7}))[^-]+(?=-)|(?<=-)[^-\s]+-

模式匹配:

  • (?: 2个备选方案的非捕获组
  • (?<=[^-\s]{4}\d\d)声明除-以外的4个字符或左边的一个空格字符,后跟2位数字
  • |
  • (?<=[^-\s]{7})声明除-以外的7个字符或左侧的一个空格字符
  • )关闭非捕获组
  • [^-]+(?=-)
  • |
  • (?<=-)[^-\s]+-向左Assert-并匹配除-以外的1+个字符和一个空格字符,后跟匹配-

Regex demo

相关问题