正则表达式生成额外输出

时间:2011-12-24 12:50:49

标签: python regex

我有一个这样的字符串 - :

st = "url=these,url=are,url=test,url=questions"

现在从这个字符串我需要生成所有url的值。现在正在使用的正则表达式是这样的 - :

import re
re.findall(r'([^\(url=\)]+)',st)

现在我想要的输出是['these,', 'are,', 'test,', 'questions'],但我的正则表达式正在给出 ['these,', 'a', 'e,', 'test,', 'q', 'estions']这是输出。

那么,我应该修改的正则表达式以及为什么我的正则表达式没有给我所需的输出。

5 个答案:

答案 0 :(得分:5)

你可能想要下一个:

>>> re.findall(r'url=(\w+)',st)
['these', 'are', 'test', 'questions']

答案 1 :(得分:4)

您使用了方括号[]来选择字符。你有[^\(url=\)]匹配除(,u,r,l,=和)之外的任何字符。

相反,您希望匹配“url =”的url=([^,]+)然后继续匹配,直到找到非逗号字符。

答案 2 :(得分:2)

这是因为你的正则表达式基于字母'url'分裂。

这对我有用:

re.findall(r'url=([^,]+)',st)

答案 3 :(得分:2)

这不是正则表达式的答案,但也许你想要考虑到它:

In [14]: st = "url=these,url=are,url=test,url=questions"
In [15]: [item.strip(',') for item in st.split('url=') if item]
Out[15]: ['these', 'are', 'test', 'questions']

答案 4 :(得分:1)

re.findall(r'url=([^,]+)', st)