2011-12-24 100 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