如何拆分字符串以获取大括号中的最后一项?

时间:2016-08-30 17:43:46

标签: python regex

我正在尝试拆分字符串以提取大括号中的最后一项。

例如,如果我有字符串

'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)')

有没有更好的方法可以解决这个问题呢?

4 个答案:

答案 0 :(得分: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')]

答案 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)')

答案 2 :(得分:0)

我会使用这个方案,因为t是你的文字:

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

正则表达式搜索左括号,然后取出既不打开也不关闭括号的所有内容,然后匹配右括号。由于可能有多个这样的,我使用findall并取最后一个。

答案 3 :(得分:0)

如果您在最后一个块之前没有任何括号,则可以正常工作。

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