2011-12-24 65 views
1

我有一个字符串像这个 - :正则表达式表达式生成额外的输出

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']这是输出。

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

回答

4

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

取而代之的是,您想要url=([^,]+)与'url ='匹配,然后继续匹配直到找到非逗号字符。

+0

是啊,知道了。感谢您的解释。我只是无法绕过我的头正则表达式 – RanRag

5

你可能想要的东西,喜欢下:

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

+1比我更整洁:) –

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

这是因为你的正则表达式是基于字母“URL”分裂。

这个工作对我来说:

re.findall(r'url=([^,]+)',st) 
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'] 
+0

其实,我必须将这个正则表达式模式应用到一个大的HTML文件。所以,我认为正则表达式会比普通的字符串操作更快。 – RanRag

+0

哦!速度!要小心,检查一下。字符串方法闪电般快,经常跳过正则表达式以进行简单搜索 – joaquin

+0

很好的洞察力,但不应该如何决定 – RanRag