2016-08-30 22 views
0

我想分割一個字符串來提取大括號中的最後一項。如何分割字符串以獲取大括號中的最後一項?

例如,如果我有串

'Stud Rd/(after) Ferntree Gully Rd (Scoresby)' 

我想將它拆分成組件

('Stud Rd/(after) Ferntree Gully Rd', 'Scoresby') 

到目前爲止,我已經寫了下面的正則表達式來做到這一點

re.search(r'^(.*) \((.*)\)$', string) 

然而,這種情況下輸入如

'Bell St/Oriel Rd (Bellfield (3081))' 

,我想被分成

('Bell St/Oriel Rd', 'Bellfield (3081)') 

是否有更好的方法,然後這個處理這個問題呢?

+2

您認爲'Bell St/Oriel Rd(Bellfield(3081))'如何拆分? –

+1

當你說「進入組件」時,試着更具體一些。進入哪些組件?括號中的最後一項?我不確定我瞭解你正試圖將其分成哪些組件。 – bravosierra99

+0

@BenBeirut我編輯過這個問題。 –

回答

4

你可以使用這個懶惰的正則表達式:

(.*?) \((.*)\)[^()]*$ 

RegEx Demo

例子:

>>> reg = r'(.*?) \((.*)\)[^()]*$' 

>>> s = 'Bell St/Oriel Rd (Bellfield (3081))' 
>>> re.findall(reg, s) 
[('Bell St/Oriel Rd', 'Bellfield (3081)')] 

>>> s = 'Stud Rd/(after) Ferntree Gully Rd (Scoresby)' 
>>> re.findall(reg, s) 
[('Stud Rd/(after) Ferntree Gully Rd', 'Scoresby')] 
0

我會用這個方案,給予t是你的文字:

last = re.findall('\([^())]+\)', t)[-1] 

正則表達式搜索一個左括號,然後採取一切既不是開也不是右括號,然後右括號匹配。由於可能有多個這樣的,我使用findall並採取最後一個。

0

這個假設在最後一個塊之前沒有任何圓括號。

var = 'Bell St/Oriel Rd', 'Bellfield (3081)'.split('(') 
var[-1] = var[-1][:-1] 
1

改變你的正則表達式,並與匹配對象(通過search返回工作功能)在親單程:

import re 

str = 'Bell St/Oriel Rd (Bellfield (3081))' 
result = re.search(r'^(.*?) \((.*?)\)$', str) 

print(result.group(1,2)) # ('Bell St/Oriel Rd', 'Bellfield (3081)') 
相關問題