【发布时间】:2015-01-04 16:44:24
【问题描述】:
我想在逗号处拆分 Python 多行字符串,除非逗号在括号内的表达式中。例如,字符串
{J. Doe, R. Starr}, {Lorem
{i}psum dolor }, Dol. sit., am. et.
应该拆分成
['{J. Doe, R. Starr}', '{Lorem\n{i}psum dolor }', 'Dol. sit.', 'am. et.']
这涉及到括号匹配,所以可能正则表达式在这里没有帮助。 PyParsing 具有commaSeparatedList,这几乎 可以满足我的需要,除了 quoted (") 环境受到保护而不是 {}-delimited 环境。
有什么提示吗?
【问题讨论】:
-
AFAIK Python 不支持正则表达式中的递归。仅供参考,这将 do the job 与 PCRE:
(?'braces'\{(?:[^{}]++|\g<braces>)*\})(*SKIP)(*FAIL)|, -
这不是你要问的小事......正则表达式没有帮助,因为你需要一个带内存的状态机来匹配封闭的项目......(括号,引号等)跨度>
-
如果没有递归正则表达式(进行递归的表达式)就无法完成。我认为 Python 现在有一个更新的版本可以做到这一点。有趣的是 Perl 如何来自 Python,Perl 将其抛诸脑后。
-
@sln:“Perl 来自 Python”是什么意思?当 Guido 开始考虑 Python 时,Perl 就已经存在,早在大多数人甚至没有听说过 Python 之前就已经广泛使用,并且在 1.x/early-2.x 时代对 Python 的开发产生了影响。特别是 Python 的
re引擎直接基于 Perl 的。而且我不确定能够在没有警告的情况下花费指数级时间在正则表达式上算作“将其留在尘土中”...... -
@abarnert - 我认为 Perl 可能已经存在,但 Perl 采用了很多功能,这是我不知道的第一个功能。我简要地认为我在 Python re beta 网站上阅读了一些详细信息,似乎有很多新事物正在使用可用的语法结构。
标签: python regex parsing pyparsing