我有以下字符串:
s = index ( 1.0000000e+00 2.0000000e+00 3.0000000e+00) _x_ ( error error error ) t ( 1.2500000e+02 1.2500000e+02 1.2500000e+02 )
我需要将其拆分为如下列表:
['index', '1.0000000e+00 2.0000000e+00 3.0000000e+00',
'_x_', 'error error error',
't', '1.2500000e+02 1.2500000e+02 1.2500000e+02']
我无法想出这样做的正则表达式。
答案 0 :(得分:4)
您可以使用以下正则表达式来拆分此字符串(最后一个列表' s项目将是一个空字符串。):
import re
s = "index ( 1.0000000e+00 2.0000000e+00 3.0000000e+00) _x_ ( error error error ) t ( 1.2500000e+02 1.2500000e+02 1.2500000e+02 ) "
re.split("\s*?(?:\(|\))\s*", s)
这导致:
['index', '1.0000000e+00 2.0000000e+00 3.0000000e+00', '_x_', 'error error error', 't', '1.2500000e+02 1.2500000e+02 1.2500000e+02', '']
此外,您可以使用以下正则表达式提取字符串的组件,然后处理它们(例如从子字符串中剥离空格)。这个正则表达式假设字符串具有平衡的左/右parens:
re.findall("(?:(?<=\()[^)]*?(?=\))|[a-z_]+)",s)
它应该产生以下输出:
['index', ' 1.0000000e+00 2.0000000e+00 3.0000000e+00', '_x_', ' error error error ', 't', ' 1.2500000e+02 1.2500000e+02 1.2500000e+02 ']
答案 1 :(得分:2)
这是一个列表理解:
[item.strip() for item in s.replace("(", ")").split(")")]
这里有一些基本上可以满足您需求的代码。几乎。
mylist = []
for item in s.replace("(", ";").replace(")", ";").split(";"):
mylist.append(item.strip())
print mylist[:-1]
输出:
['index', '1.0000000e+00 2.0000000e+00 3.0000000e+00', '_x_', 'error error error', 't', '1.2500000e+02 1.2500000e+02 1.2500000e+02']
答案 2 :(得分:1)
类似于@ AlexKotliarov的答案,但只是分裂空白和parens
>>> import re
>>> re.split(r'[\s()]+', s)
输出:
['index', '1.0000000e+00', '2.0000000e+00', '3.0000000e+00', '_x_', 'error', 'error', 'error', 't', '1.2500000e+02', '1.2500000e+02', '1.2500000e+02', '']
阐释:
拆分集+
中的一个或多个字符[
.. ]
:空格\s
和括号(
&amp; )