2013-04-29 55 views
0

我完全新的正則表達式,我試圖讓這樣的:從一個字符串中提取數據,留出一個模式

["Group", "s1", "s2", "Group2"] 

string = "_GRP_Group||s1||s2||Group2||" 

所有我現在已經是:

word = re.findall(r'([^\|]+)', string) 

剛剛離開了管,我得到這個:

['_GRP_Group', 's1', 's2', 'Group2'] 

有沒有辦法擺脫_GRP_前綴?

+0

有很多方法可以做到這一點,但他們大多希望在你解決問題的一般情況下工作。換句話說,你想根據什麼去除前綴?強調?大寫?長度? – 2013-04-29 21:45:54

+0

嘿。感謝回覆。我想根據它的值過濾掉它:'_GRP_' – beatlemaniac 2013-04-29 21:56:25

回答

2

基於其他的答案您的意見,這聽起來像_GRP_前綴的前綴字符串而不是每個單獨的拆分值?

試試這個:

string = "_GRP_Group||s1||s2||Group2||" 
word = re.findall(r"(?:_GRP_)?([^|]+)", string) 
+0

不幸的是,'findall'仍然會將'_GRP_'正則表達式匹配應用於每個匹配的組(就像其他答案一樣),但是因爲它是可選的並且[非捕獲](http://docs.python.org/2/howto /regex.html#non-capturing-and-named-groups),它不會出現在輸出中。 – nemec 2013-04-29 22:17:57

1

您不需要使用正則表達式來分割第一個字符串||或刪除前綴_GRP_。你可以只用split和切片:

words = "_GRP_Group||s1||s2||Group2||"[5:].split('||') 

切片[5:]將前五個字符從字符串排除。
如果你不知道在哪裏_GRP_會發生,你可以使用replace

words = "_GRP_Group||s1||s2||Group2||".split('||') 
words = [word.replace("_GRP_", "") for word in words] 
+0

我可以做到這一點,但我認爲會有更優雅的解決方案使用正則表達式 – beatlemaniac 2013-04-29 22:00:29

+0

是否有可能看到'string =「_GRP_Group || _GRP_s1 || _GRP_s2 || _GRP_Group2 ||「'或者它是整個字符串本身的前綴? – nemec 2013-04-29 22:04:46

+0

它是整個字符串的前綴 – beatlemaniac 2013-04-29 22:06:36