2013-05-19 64 views
0

我正在使用python正則表達式。 我的輸入是這樣的字符串:查找由相同字符串分隔的字符串

[In 1]: Names = "John r Spencer Farrow r David K r Gillian" 
[In 2]: Names = "Andrew r Eli Ltd" 

即有任何數量的當事人(如「約翰」,或「斯賓塞法羅」),均有「R」分開。

我想我的輸出是一個字符串的列表,字符串是派對。像這樣

[Out 1]: ["John", "Spencer Farrow", "David K", "Gillian"] 
[Out 2]: ["Andrew", "Eli Ltd"] 

我已經嘗試的代碼是從字符集包括空格和本

re.findall(r'[^(\sr\s)\w\s]+', Names) 

即我嘗試排除特定的字符串\ SR \ S的變化(或「R」)單詞字符。

請原諒我的無知,我是新來的正則表達式。

回答

2

像這樣的東西應該工作:

>>> import re 
>>> s = "John r Spencer Farrow r David K r Gillian" 
>>> re.split(r'\br\b',s) 
['John ', ' Spencer Farrow ', ' David K ', ' Gillian'] 

這人會擺脫任意數量的空白太多:

>>> re.split(r'\b(?:\s*)r(?:\s*)\b',s) 
['John', 'Spencer Farrow', 'David K', 'Gillian'] 

當然,如果你知道你的分隔符總是" r ",那麼你可以只使用str.split

>>> s.split(' r ') 
['John', 'Spencer Farrow', 'David K', 'Gillian'] 
+0

此外,如果在不屬於分隔符的部分的字符串周圍留有空白,可以使用列表理解或'map'處理:s.split中的[x.strip() ('r')]' – pcurry

+0

@pcurry - 這是真的 - 但是你不能寫一個簡單的解決方案,它也會在不使用正則表達式的情況下在'「\ tr \ t」上分割。 – mgilson