使用regex获得字符串混合

2024-09-20 22:21:44 发布

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

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

Tags: and方法字符串importrehereplusreg
2条回答

在匹配第一个大写字符和最后一个数字之前,您可以不使用正向先行和使用单词边界\b来获得匹配

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

部分

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

Regex demo| Python demo

例如

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

https://regex101.com/r/LMvz15/1

相关问题 更多 >

    热门问题