正则表达式在python中的某些标记后查找N个数字

2024-09-27 07:19:16 发布

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

我有以下数据:

x='214.123123Blar=-22.0546665252602,0.977496828218,0.793335875166,30.98755066254,-0.7838067629 75,0.508399307091,0.540006004199,0.335122489689,700.696104558168ahoymatey=morestuff'

我的python解决方案很简单:

blar = re.search("Blar=(-?\d+\.\d+)((,-?\d+\.\d+)+)", x)
blar.groups()

这将返回:

('-22.0546665252602',',0.977496828218,0.793335875166,30.98755066254,-0.783806762975,0.508399307091,0.540006004199,0.335122489689,700.696104558168',',700.696104558168')

我能对regex做些什么修正来防止最后一个数字的重复吗?你知道吗

我意识到切掉它是微不足道的,但我更希望正则表达式是正确的。一些附加信息:“Blar=”总是相同的,但是在本例中,后面的文本“ahoymatey”可以是任何内容。你知道吗

理想的解决方案是允许我指定N个跟在“Blar=”后面的数字。但如果我能不让最后一个数字重复,我会很激动的。你知道吗


Tags: 数据文本re信息search数字解决方案regex
2条回答

你的regexp是正确的。有三组(括号对),你在比赛中确实得到三组。你知道吗

regexp通常有无意义的组。实际上,一个好习惯是用Python命名它们:

blar = re.search("Blar=(?P<head>-?\d+\.\d+)(?P<tail>(,-?\d+\.\d+)+)", x)
print(blar.group('head'))
print(blar.group('tail'))

使用非捕获嵌入组

blar = re.search("Blar=(-?\d+\.\d+)((?:,-?\d+\.\d+)+)", x)
blar.groups()

('-22.0546665252602',',0.977496828218,0.793335875166,30.9875506654,-0.7838067629')

相关问题 更多 >

    热门问题