2014-10-06 104 views
0

我在python中有一個問題,我有一個模式,可以在1到XXX倍的任何位置重複。蟒蛇 - 基於字符串的基於括號的分割字符串

的模式是我有格式的字符串

作者(所屬)作者(所屬)等等等等許多作者/隸屬關係存在。

當你不知道你是否有1個作者(聯盟)或100個實例時,Python中最好的方式是如何將字符串分割成這樣的形式?

編輯 - 維克托·萊斯*(慕尼黑工業大學)阿爾方肯珀(慕尼黑工業大學),托馬斯·諾伊曼(慕尼黑工業大學,德國)

這就是我與工作對象的樣本串。我已經嘗試過re.split/re.findall並且沒有運氣。我假設我正在做一些正則表達式的錯誤。

編輯2 - '\ w + {1,3}(\ w {1,10})'是我試圖使用的模式。

我的邏輯是一個名字是1-3個單詞,然後(。然後一個關係在1-10個單詞之間,並關閉)。

+1

使用re.findall https://docs.python.org/2/library/re.html#re.findall – user3885927 2014-10-06 23:16:04

回答

1

這裏是一個樣本。 。看起來你是想(在之間(和文本)匹配沒有內容)或以下是做到這一點假設它酷似以上單程

import re 
text = r'Viktor Leis* (Technische Universitt Mnchen) Alfons Kemper (Technische Universitt Mnchen) Thomas Neumann (Technische Universitt Mnchen, Germany)' 
pattern = '[^\(\)]* \([^\(]+\)' 
result = re.findall(pattern,s) 
print result 

輸出:

['Viktor Leis* (Technische Universitt Mnchen)', ' Alfons Kemper (Technische Universitt Mnchen)', ' Thomas Neumann (Technische Universitt Mnchen, Germany)'] 

您可能需要移除領先,並使用帶尾隨空格。

0

這是想到

import re 
s = 'Bob (ABC) Steve (XYZ) Mike (ALPHA)' 
pattern = '\w+ \(\w+\)' 

>>> re.findall(pattern,s) 
['Bob (ABC)', 'Steve (XYZ)', 'Mike (ALPHA)'] 
+0

嘿先生! 感謝您的建議!我原先使用re的時候曾經想過同樣的事情。我的表情很相似。我實際上嘗試過re.split,但無濟於事。我一直在與你的空集。也許如果我包含一個示例行,它會更好? Viktor Leis *(慕尼黑工業大學)Alfons Kemper(慕尼黑工業大學)Thomas Neumann(德國慕尼黑工業大學) 是我試圖用這種模式分開的衆多字符串之一。 – Jibril 2014-10-06 23:23:04

0

的第一件事情你可以做這樣的:

thing="Author1 (Affiliation) Author2 (Affiliation) Author3 (Affiliation)" 
s=thing.split(') ') 

list=[] 
for i in s: 
    if not i.endswith(')'): 
     list.append(i+')') 
    else: 
     list.append(i) 
+0

你好!謝謝。這可能必須是我所做的 - 比試圖找出我遇到的正則表達式問題好得多。 – Jibril 2014-10-06 23:39:16

+0

Simpler總是更好! (如果你這樣做,一定要標記它'接受') – 2014-10-06 23:51:57