嘿,我只是想做一些简单的regEx。我想要的是什么之间的任何东西?和&或者&和&或&和一个字符串的结尾。所以我一直在阅读码头,我觉得,至少我应该接近这样的模式:
p = re.compile('(\?.*?&)|(&.*?&)|(&.*?$)')
或
re.compile('[&\?](.*?)&')
但我尝试的所有变种都有点不稳定。你做了什么的解释也会很好。一个例子:
?k=091910918&ack=901828312&p=999998
它应该是:
k=091910918, ack=901828312, and p=999998
作为答案。谢谢!
答案 0 :(得分:2)
您可以使用以下正则表达式:
>>> import re
>>> re.findall(r'[?&]([^?&]+)', '?k=091910918&ack=901828312&p=999998')
['k=091910918', 'ack=901828312', 'p=999998']
正则表达式:
[?&] # any character of: '?', '&'
( # group and capture to \1:
[^?&]+ # any character except: '?', '&' (1 or more times)
) # end of \1
你也可以在这里分开......假设你的字符串看起来像这样:
>>> filter(None, re.split('[?&]', '?k=091910918&ack=901828312&p=999998'))
['k=091910918', 'ack=901828312', 'p=999998']
答案 1 :(得分:0)
如果您不介意只有一个匹配的组,请使用:
[\?&](\w+\=\d+)
如果您想为每个组分配两个匹配的组,请使用:
[\?&](\w+)\=(\d+)
您遇到的主要问题是,您使用.*
为正则表达式提供了过多的灵活性。如果你限制每个群体可以做多少,那么最终会更加合作。