2

我想从字符串中提取任何'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', '']在这个字符串中找到吗?

4

3 回答 3

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', '']}
于 2012-09-29T14:26:08.937 回答
3

尝试以下操作:

>>> s = '/?user=hello&user=man&user='
>>> re.findall(r"user=([^&]*)", s)
['hello', 'man', '']
于 2012-09-29T14:25:34.093 回答
0

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

于 2012-09-29T14:26:24.650 回答