首页 > 解决方案 > 使用正则表达式获取字符串混合

问题描述

import re
s = 'words here plus num A18-11186 B7  and Q12-45786 D3'

我有以下字符串,我想提取A18-11186 B7Q12-45786 D3使用正则表达式。我试过以下

reg = r'\b(?=\d*[A-Z])((?:[A-Z0-9]+-)(?:\d+-)?\d+)\b'
r1 = re.findall(reg,s)

这给了我

['A18-11186', 'Q12-45786']

这与我想要的很接近,只是它缺少空格、字母和数字。

如何更改我reg以获得所需的输出?

期望的输出

['A18-11186 B7', 'Q12-45786 D3']

标签: pythonregexpython-3.xstringtext

解决方案


\b在匹配第一个大写字符和最后一个数字之前,您可以在不使用正向前瞻和使用单词边界的情况下获得匹配项。

\b[A-Z][0-9]+-[0-9]+ [A-Z][0-9]+\b

在零件

  • \b字边界
  • [A-Z][0-9]+匹配单个 AZ 和 1+ 位
  • -[0-9]+ 匹配-, 1+ 个数字和一个空格
  • [A-Z][0-9]+匹配单个 AZ 和 1+ 位
  • \b字边界

正则表达式演示| Python 演示

例如

import re
regex = r"\b[A-Z][0-9]+-[0-9]+ [A-Z][0-9]+\b"
test_str = "words here plus num A18-11186 B7  and Q12-45786 D3"
print(re.findall(regex, test_str))

输出

['A18-11186 B7', 'Q12-45786 D3']

推荐阅读