2016-08-30 45 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)') 
相关问题