【问题标题】:Regex match 1 or 2 digits without error: look-behind requires fixed-width pattern?正则表达式匹配 1 位或 2 位数字没有错误:后视需要固定宽度的模式?
【发布时间】:2021-04-01 01:14:34
【问题描述】:

如何在正则表达式中捕获 1 位或 2 位数字?

文字

IF-MIB::ifDescr.1 = 1/1/g1, Office to DMZ
IF-MIB::ifDescr.10 = 1/1/g10, Office to DMZ

正则表达式

这仅适用于1 digit。 IE。 1/1/g1 但不适用于 2 位数。 IE。 1/1/1g10。

(?P<ifDescr>(?<=ifDescr.\d = ).*)

这适用于正则表达式测试器中的2 digits,但不适用于 centos 中的 python3。

(?P<ifDescr>(?<=ifDescr.\d|\d = ).*)

我收到以下错误:

re.error:look-behind 需要固定宽度的模式

【问题讨论】:

  • 您的正则表达式掩码有一个问题是捕获并非适用于所有情况,.* 不好。
  • 试试这个demo

标签: regex


【解决方案1】:

虽然你不能做一个不固定宽度的lookbehind,但是你可以用一个or条件组合两个lookbehind:

(?:(?<=ifDescr\.\d = )|(?<=ifDescr\.\d\d = ))(?P<ifDescr>.*)
  • (?:...) 非捕获组
  • (?&lt;=ifDescr\.\d = ) 向后看,将 ifDescr. 与一位数字匹配
  • |
  • (?&lt;=ifDescr\.\d\d = ) 向后看,将 ifDescr. 与两位数匹配
  • (?P&lt;ifDescr&gt;.*) 匹配后面的任何内容,并设置一个名为 ifDescr 的组反向引用

查看proof


但这适用于有限的组合。如果你不确定有多少位数,你应该使用组捕获,然后从组ifDescr获取结果

(?:ifDescr\.\d+ = )(?P<ifDescr>.*)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 2014-07-09
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多