2024-03-29 06:46:40 发布
网友
我有这样的意见
txt='.A3 S3- D4(SPACE) D5/ E9R E0&'
如何提取匹配1个字母+1个数字的所有模式。可以在前后加标点符号(除&;外)或空格,但不允许在前后加另一个字母。你知道吗
预期匹配为:
['A3', 'S3', 'D4', 'D5']
E9R将不会返回,因为它在E9之后包含一个字母。 E0&;将不会返回,因为它包含&
import re re.findall('[a-z]{2,3}[0-9]{1,3}',txt)
你可以用
re.findall(r'(?<![a-z0-9&])[a-z][0-9](?![a-z0-9&])', s, re.I)
参见regex demo
细节
(?<![a-z0-9&])
&
[a-z]
re.I
[0-9]
(?![a-z0-9&])
Python demo:
import re rx = r"(?<![a-z0-9&])[a-z][0-9](?![a-z0-9&])" s = ".A3 S3- D4(SPACE) D5/ E9R E0&" print(re.findall(rx, s, re.I)) # => ['A3', 'S3', 'D4', 'D5']
你可以用
参见regex demo
细节
(?<![a-z0-9&])
-前面没有ASCII字母、数字或&
的位置[a-z]
-一个ASCII字母(注意re.I
使模式不区分大小写)[0-9]
-一个ASCII数字(?![a-z0-9&])
-不紧跟ASCII字母、数字或&
的位置。你知道吗Python demo:
相关问题 更多 >
编程相关推荐