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和1+数字[A-Z][0-9]+
匹配-[0-9]+
,1+个数字和一个空格-
匹配单个A-Z和1+数字[A-Z][0-9]+
单词边界\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-]+