0

我有以下形式的数据:

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

我可以对正则表达式进行任何更正以防止最后一个数字的重复吗?

我意识到将其砍掉是微不足道的,但我希望正则表达式是正确的。一些附加信息:'Blar=' 总是相同的,但后面的文本,在这个例子中是 'ahoymatey',可以是任何东西。

理想的解决方案将允许我指定跟随“Blar =”的 N 个数字。但如果我能阻止最后一个数字重复,我会很高兴。

4

2 回答 2

1

Use a non-capturing embedded group

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

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

于 2013-05-25T18:03:18.123 回答
1

您的正则表达式在某种程度上是正确的。有三组(括号对),你在比赛中确实得到了三组。

正则表达式通常有无意义的组​​。事实上,一个好习惯是用 Python 命名它们:

blar = re.search("Blar=(?P<head>-?\d+\.\d+)(?P<tail>(,-?\d+\.\d+)+)", x)
print(blar.group('head'))
print(blar.group('tail'))
于 2013-05-25T17:58:09.777 回答