Python 使用正则表达式获取字符串混合

Python 使用正则表达式获取字符串混合,python,regex,python-3.x,string,text,Python,Regex,Python 3.x,String,Text,我有以下字符串,我想使用正则表达式提取A18-11186 B7和Q12-45786 D3。我试过以下方法 import re s = 'words here plus num A18-11186 B7 and Q12-45786 D3' 这让我 reg = r'\b(?=\d*[A-Z])((?:[A-Z0-9]+-)(?:\d+-)?\d+)\b' r1 = re.findall(reg,s) 这是接近我想要的,除了它缺少一个空格,字母和数字 如何更改我的reg以获得所需的输出 期望输出

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

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

reg = r'\b(?=\d*[A-Z])((?:[A-Z0-9]+-)(?:\d+-)?\d+)\b'
r1 = re.findall(reg,s)
这是接近我想要的,除了它缺少一个空格,字母和数字

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

期望输出

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

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

['A18-11186 B7', 'Q12-45786 D3']
部分地

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

比如说

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

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

[A-Z0-9-]+[A-Z0-9 -]*?[A-Z0-9-]+