在我的例子中,分隔符字符串是' '
(连续3个空格,但答案应适用于任何多字符分隔符),并且要搜索的边缘案例文本可以是:
'Coord="GLOB"AL Axis=X Type="Y ZR" Color="Gray Dark" Alt="Q Z"qz Loc=End'
解决方案应该返回以下字符串:
Coord="GLOB"AL
Axis=X
Type="Y ZR"
Color="Gray Dark"
Alt="Q Z"qz
Loc=End
我已经查找了正则表达式解决方案,同时评估了反问题(匹配多字符分隔符,除非在内部引号),因为Python 3.4.3的re.split
命令允许通过正则表达式模式轻松分割文本,但我不确定是否存在正则表达式解决方案,因此我也开放(高效)非正则表达式解决方案。
我已经看到使用包含正则表达式模式的lookahead / lookbehind的反问题的一些解决方案,但它们不起作用,因为Python lookahead / lookbehind(与其他语言引擎不同)需要固定宽度模式。
此问题与Regex matching spaces, but not in "strings"或类似的其他问题不重复,因为:
答案 0 :(得分:2)
x='Coord="GLOB"AL Axis=X Type="Y ZR" Color="Gray Dark" Alt="Q Z"qz Loc=End'
print re.split(r'\s+(?=(?:[^"]*"[^"]*")*[^"]*$)',x)
您需要使用lookahead
来查看space
之间是否""
输出['Coord="GLOB"AL', 'Axis=X', 'Type="Y ZR"', 'Color="Gray Dark"', 'Alt="Q Z"qz', 'Loc=End']
对于广义版本,如果您希望split
delimiters
""
内不存在re.split(r'delimiter(?=(?:[^"]*"[^"]*")*[^"]*$)',x)
,请使用
git add