2011-05-30 112 views
1

我沒有做太多的正則表達式,所以我遇到了一個很好的正則表達式的問題。使用正則表達式「xxx:abc」來匹配「abc」?

下面是一些例子輸入:

文件:ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2,文件:90jfa9_189204hsfiansdIASDNF,PDF:a09srjbZXMgf9oe90rfmasasgjm4-AB,電子表格:ASr0gk0jsdfPAsdfn

,這裏是我想匹配每個那些什麼例子: ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2,90jfa9_189204hsfiansdIASDNF,a09srjbZXMgf9oe90rfmasasgjm4-AB,ASr0gk0jsdfPAsdfn

會是怎樣的最好和最簡單的也許正則表達式來使用這個?謝謝!

回答

1

.*:(.*)應該將字符串中最後一個冒號後的所有內容作爲第一組(或第二組,如果您計算'匹配所有'組)的值的所有內容。

另一種方法是[^:]*$,它可以讓您在字符串的末尾添加所有字符,但不包括冒號字符串中的最後一個字符。

+0

第二個很好用,很容易理解。謝謝! – Jeff 2011-05-30 23:09:08

+0

@ Jeff-'[^:] * $'有效嗎?如果你這麼說! – manojlds 2011-05-30 23:10:14

0

(.*)\:(.*)

然後在第二個捕獲組...

1

使用類似如下:

([^:]*)(,|$) 

,並獲得第一組。如果最後需要,您可以使用非捕獲組(?:ABC)。此外,這也使得假設值本身可以具有,作爲字符之一。

我不認爲像(.*)\:(.*)這樣的答案會起作用。它將匹配整個字符串。

0

最簡單似乎是[^:]*:([^,]*)(?:,|$)

這是找到什麼東西(可能沒有)直到冒號,然後冒號,然後任何東西不包括逗號(這是匹配的東西),直到逗號或行結束。

注意在最後使用非捕獲組來封裝交替。唯一出現的捕捉組是您想要使用的捕捉組。

因此,在蟒蛇:

import re 

exampStr = "document:ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2, file:90jfa9_189204hsfiansdIASDNF, pdf:a09srjbZXMgf9oe90rfmasasgjm4-ab, spreadsheet:ASr0gk0jsdfPAsdfn" 

regex = re.compile("[^:]*:([^,]*)(?:,|$)") 
result = regex.findall(exampStr) 
print result 

# 
# Result: 
# 
# ['ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2', '90jfa9_189204hsfiansdIASDNF', 'a09srjbZXMgf9oe90rfmasasgjm4-ab', 'ASr0gk0jsdfPAsdfn'] 
# 
# 

一個很好的介紹是:http://www.regular-expressions.info/tutorial.html