我想从字符串'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', '']
吗?
答案 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=(.*)
将仅匹配数据的第一次出现,而不是每个字符的大块。那是什么?运算符在正则表达式中。