[英]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>
字符串直到结束另一种选择是重复匹配所有下划线后跟 1+ 位数字直到字符串结束,然后在_
拆分
(?:_\d{1,2})+$
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.