从复杂字符串中解析出与给定模式匹配的子字符串

Parsing out substrings matching a given pattern from a complex string

我正在编写一个脚本,可以进行一些我通常手动进行的快速计算。下面的字符串有所不同,因为它是项目描述,但格式通常有两种类型。我需要一种从脚本的其余部分解析出 xMM 的方法,因为它是我计算所需要的,并且可以从那里获取它。我试过使用分区和一些不同的 .split() 组合,但我不确定我是否理解它们如何运作的更精细的内部工作原理。

粗体数字各不相同,但我尝试解析的信息始终是 (*)*MM。如果有帮助的话。


test1 = 'TYP4,(g)DV, 6/8", 13.5MM-(g)<b>6MM</b> FVC/.060PVB/(g)<b>6MM</b> FVC Locked C3, Item Stat, Special Op'

test2 = 'TYP5,(x)DC, 1/2", (x)<b>6MM</b> CDS, Check C3'


print(test1.split("MM",1))
print(test2.split("MM",1))

char1 = ')'
char2 = 'MM'

print(test[test.find(char1)+1 : test.find(char2)])

如有任何帮助或指导,我们将不胜感激。

**编辑添加我的一些尝试以获得 [6MM,6MM] 或 [6,6] 的目标。由于删除失败而未列出的是尝试拆分 ')' 和其他一些小组合。也许我想太多了,因为这似乎不是一个复杂的问题。我不确定更改标题是否会影响任何内容。

您可以使用以下正则表达式

import re
s1 = 'TYP4,(g)DV, 6/8", 13.5MM-(g)6MM FVC/.060PVB/(g)6MM FVC Locked C3, Item Stat, Special Op'
m = re.findall('\(*\)(\d+MM)', s1)

然后用m

做点什么

给定示例中的匹配组是:

  • 第 1 场比赛 28-32 )6MM
  • 组1. 29-32 6MM
  • 第2场全场比赛47-51)6MM
  • 组1. 48-51 6MM

在 xMM 中,x 可以是整数或浮点数,下面的代码捕获这两个值。

import re
p = re.compile("\d+\.\d+MM|\d+MM")
p.findall('TYP4,(g)DV, 6/8", 13.5MM-(g)6MM FVC/.060PVB/(g)6MM FVC Locked C3, Item Stat, Special Op')

output: ['13.5MM', '6MM', '6MM']

希望对您有所帮助,如果您想编写自己的正则表达式,请从 here 开始尝试一下。

注意:接受的答案未能从问题的第一个字符串中捕获 13.5MM