正则表达式匹配不以字符串开头的数字
Regular expression match numbers not starting with string
我想出了一个正则表达式的需求,用于查找不以 COM 开头的数字。我尝试了以下表达式,但它没有按预期工作,并且 COM 的条件不工作。
(?!(COM|СОМ))\d{11,19}
您需要负向后视 来检查字符串前面是否没有紧跟其他模式。此外,由于您要匹配一系列数字,因此您应该在正则表达式中包含数字边界 (?<!\d)
和 (?!\d)
。
使用
(?<!COM|\d)\d{11,19}(?!\d)
(?<!COM)(?<!\d)\d{11,19}(?!\d)
见regex demo。后者将与 Python 和 Boost 正则表达式库一起使用,这些库需要后视替代项来匹配相同长度的文本。
详情
(?<!COM)
- 如果在当前位置 的左侧紧邻 COM
,则匹配失败的否定后视
(?<!\d)
- 如果紧邻当前位置 左侧有 as 数字,则匹配失败的负后视
\d{11,19}
- 十一到十九位数字
(?!\d)
- 如果当前位置右侧紧邻 as 数字,则匹配失败的否定前瞻。
我想出了一个正则表达式的需求,用于查找不以 COM 开头的数字。我尝试了以下表达式,但它没有按预期工作,并且 COM 的条件不工作。
(?!(COM|СОМ))\d{11,19}
您需要负向后视 来检查字符串前面是否没有紧跟其他模式。此外,由于您要匹配一系列数字,因此您应该在正则表达式中包含数字边界 (?<!\d)
和 (?!\d)
。
使用
(?<!COM|\d)\d{11,19}(?!\d)
(?<!COM)(?<!\d)\d{11,19}(?!\d)
见regex demo。后者将与 Python 和 Boost 正则表达式库一起使用,这些库需要后视替代项来匹配相同长度的文本。
详情
(?<!COM)
- 如果在当前位置 的左侧紧邻 (?<!\d)
- 如果紧邻当前位置 左侧有 as 数字,则匹配失败的负后视
\d{11,19}
- 十一到十九位数字(?!\d)
- 如果当前位置右侧紧邻 as 数字,则匹配失败的否定前瞻。
COM
,则匹配失败的否定后视