我有以下笨重的代码从字符串'ABC(XYZ)'中提取'ABC'和'(XYZ)'
import re
test_str = 'ABC(XYZ)'
partone = re.sub(r'\([^)]*\)', '', test_str)
parttwo_temp = re.match('.*\((.+)\)', test_str)
parttwo = '(' + parttwo_temp.group(1) + ')'
我想知道是否有人能想出一个更好的正则表达式来分割字符串。感谢。
答案 0 :(得分:1)
您可以使用>>> import re
>>> test_str = 'ABC(XYZ)'
>>> re.findall(r'\([^()]*\)|[^()]+', test_str)
['ABC', '(XYZ)']
>>> [i for i in re.findall(r'(.*)(\([^()]*\))', test_str)[0]]
['ABC', '(XYZ)']
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) {console.log(x(d.year));return x(d.year)}) // x will be year
.y(function(d) {console.log(y(d.total));return y(d.total)}); //y will be total
答案 1 :(得分:0)
[i for i in re.split(r'(.*?)(\(.*?\))', test_str) if i]
答案 2 :(得分:0)
对于此类输入数据,我们可以将(
替换为空格+ (
并按空格分割:
>>> s = 'ABC(XYZ)'
>>> s.replace("(", " (").split()
['ABC', '(XYZ)']
这样我们就可以在每个左括号之前人工创建分隔符。