2011-03-07 77 views
1

我想使用由'/'字符分隔的Python拆分字符串數據。問題是該字符串可能會出現多個'/'字符,但是我想僅使用'/'分割而不使用'\'0123例如, \/2/CD」變成‘1 \/2’和‘CD’如何在'/'分隔符上拆分字符串,但是在''發生時緊跟在''後防止拆分

+3

標題問一個完全不同於問題的東西... – 2011-03-07 22:53:57

+0

是的,我不得不刪除我的答案。 – dappawit 2011-03-07 23:02:46

+0

爲混淆標題道歉。 – 2011-03-07 23:08:52

回答

5

在正則表達式使用負向後斷言:

>>> re.split(r'(?<!\\)/', r'1\/2/CD') 
['1\\/2', 'CD'] 

docs

(?<!...) 

相配如果字符串中的當前位置不是由 匹配...之前。這被稱爲 負反序斷言斷言。類似的 爲正向lookbehind斷言, 包含的模式只能匹配 某些固定長度的字符串。樣式 以負向倒序 開頭,斷言可能會在搜索字符串的開頭 處匹配。

這工作時,你有第一片空:

>>> re.split(r'(?<!\\)/', r'/CD') 
['', 'CD'] 
+0

爲了第一次就正確使用+1:你可能還想指出'maxsplit'參數(因爲這似乎是標題所要求的) – Cameron 2011-03-07 23:00:43

+0

謝謝,這是有效的。如前所述(?!...)在python文檔中提到的以下鏈接: http://docs.python.org/howto/regex.html 爲什麼在語法這兩個文件? – 2011-03-07 23:10:38

+0

明白了,出於某種原因,這裏的how to do http://docs.python.org/howto/regex.html只是談論負面的lookahead斷言而不是lookbehind。 – 2011-03-07 23:18:00

1

可以使用正則表達式對象的分割方法,只是拆分上/未遵循\(使用負回顧後):

import re 
str = u'1\\/2/CD' 
re.split(r'(?<!\\)/',str) 
+0

字符串的split()方法不接受正則表達式。相反,一個正則表達式對象也有一個'split()'方法。 – kindall 2011-03-07 22:56:29

+0

這不是一個預見。 – nosklo 2011-03-07 22:58:05

+0

感謝您的評論,我將它們納入我的答案。 – markijbema 2011-03-07 23:51:18

0

如果分隔符總是在字符串的結尾,你可以通過用戶str.rpartition:

 
>>> print u'1\/2/CD'.rpartition('/') 
(u'1\\/2', u'/', u'CD') 
相關問題