我有这样的输入
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)
答案 0 :(得分:5)
您可以使用
re.findall(r'(?<![a-z0-9&])[a-z][0-9](?![a-z0-9&])', s, re.I)
请参见regex demo
详细信息
(?<![a-z0-9&])
-位置不紧跟ASCII字母,数字或&
[a-z]
-ASCII字母(请注意,re.I
使模式不区分大小写)[0-9]
-ASCII数字(?![a-z0-9&])
-不会立即跟着ASCII字母,数字或&
的位置。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']