Python RegEx或者问题

时间:2014-07-22 16:59:03

标签: python regex

嘿,我只是想做一些简单的regEx。我想要的是什么之间的任何东西?和&或者&和&或&和一个字符串的结尾。所以我一直在阅读码头,我觉得,至少我应该接近这样的模式:

p = re.compile('(\?.*?&)|(&.*?&)|(&.*?$)')

re.compile('[&\?](.*?)&')

但我尝试的所有变种都有点不稳定。你做了什么的解释也会很好。一个例子:

?k=091910918&ack=901828312&p=999998

它应该是:

k=091910918, ack=901828312, and p=999998 

作为答案。谢谢!

2 个答案:

答案 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+)

您遇到的主要问题是,您使用.*为正则表达式提供了过多的灵活性。如果你限制每个群体可以做多少,那么最终会更加合作。

Here's a demo of the first regex on Regex101