在正则表达式中,如何将字母数字字符串的模式与前后的空格或标点匹配

2024-03-29 06:46:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的意见

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)

Tags: retxts3字母模式数字spacea3
1条回答
网友
1楼 · 发布于 2024-03-29 06:46:40

你可以用

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字母、数字或&的位置。你知道吗

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']

相关问题 更多 >