繁体   English   中英

正则表达式忽略中间匹配

[英]Regex Ignore Match in the middle

我有要解析的字符串。 数字 (0-99) 附加在带有“_”分隔符的字符串末尾。 相同的模式也可以位于具有相同分隔符的字符串中间。

例如,

#1 ..._ADDXNT_5_6_7_8_9_10_11_12_1
#2 ...X_VSVFT_0_5_ADL_R_    

这是我拥有的正则表达式

((?<=_)\d{1,2})

它适用于 #1 并将其解析出['5', '6', '7', '8', '9', '10', '11', '12', '1']然而,它也解析我不想要的['0', '5']

对于#2,它不应该匹配。

如何让它只解析末尾附加的数字而不是在中间?

for i in ['_ADTCNT_5_6_7_8_9_10_11_12_1', 'X_VDDFEFSET_0_5_ALL_C_']:
    match = re.findall(r"(?<=)\d{1,2}", i)
    print(match)

您可以使用此正则表达式进行正向预测:

(?<=_)\d{1,2}(?=(?:_\d{1,2})*$)

正则表达式演示

正则表达式详情:

  • (?<=_): Positive lookbehind to assert that we have a在前一个位置(?<=_): Positive lookbehind to assert that we have a _`
  • \\d{1,2} : 匹配 1 或 2 位数字
  • (?=(?:_\\d{1,2})*$) :正向前瞻断言我们有 0 个或多个_<digits>字符串直到结束

我认为这会起作用:

(?<=_)\d{1,2}(?!.*[A-Za-z])

而这(?!.*[A-Za-z])表示后面没有字母字符

在此处输入图片说明

另一种选择是重复匹配所有下划线后跟 1+ 位数字直到字符串结束,然后在_拆分

(?:_\d{1,2})+$

正则表达式演示| Python 演示

import re

for i in ['_ADTCNT_5_6_7_8_9_10_11_12_1', 'X_VDDFEFSET_0_5_ALL_C_']:
    result = re.search(r"(?:_\d{1,2})+$", i)
    if result:
        print([x for x in result.group().split("_") if x])

输出

['5', '6', '7', '8', '9', '10', '11', '12', '1']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM