使用正则表达式查找'hello','man'和''in'/?user = hello& user = man& user ='

时间:2012-09-29 14:21:52

标签: python regex string

我想从字符串'user='中提取'/?user=hello&user=man&user='之后的任何字符串。在这种情况下,我会'hello''man'''

我被困在这里:

>>> import re

>>> s = '/?user=hello&user=man&user='
>>> re.findall("user=(.*)",s)
['hello&user=man&user=']

如果user=的最后一次出现也以&结束,我可以找到我想要的内容,但有人知道如何在此字符串中找到['hello', 'man', '']吗?

3 个答案:

答案 0 :(得分:11)

我会放弃re并使用适用于此的工具:

from urlparse import urlsplit, parse_qs

s = '/?user=hello&user=man&user='
parse_qs(urlsplit(s).query, keep_blank_values=True)
{'user': ['hello', 'man', '']}

答案 1 :(得分:3)

尝试以下方法:

>>> s = '/?user=hello&user=man&user='
>>> re.findall(r"user=([^&]*)", s)
['hello', 'man', '']

答案 2 :(得分:0)

是的,你需要制作一个非“贪婪”的正则表达式,然后抢夺你正在测试的(。*)的最后user=。使其更具体user=(.*)?user=(.*)?user=(.*)将仅匹配数据的第一次出现,而不是每个字符的大块。那是什么?运算符在正则表达式中。