python - 在逗号处拆分字符串,除非在括号环境中

标签 python regex parsing pyparsing

我想在逗号处拆分 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.']

这涉及括号匹配,因此正则表达式可能在这里无济于事。 PyParsingcommaSeparatedList除了 quoted (") 环境而不是 {}-delimited 环境,这几乎做了我需要的.

有什么提示吗?

最佳答案

编写您自己的自定义拆分函数:

 input_string = """{J. Doe, R. Starr}, {Lorem
 {i}psum dolor }, Dol. sit., am. et."""


 expected = ['{J. Doe, R. Starr}', '{Lorem\n{i}psum dolor }', 'Dol. sit.', 'am. et.']

 def split(s):
     parts = []
     bracket_level = 0
     current = []
     # trick to remove special-case of trailing chars
     for c in (s + ","):
         if c == "," and bracket_level == 0:
             parts.append("".join(current))
             current = []
         else:
             if c == "{":
                 bracket_level += 1
             elif c == "}":
                 bracket_level -= 1
             current.append(c)
     return parts

 assert split(input_string), expected

关于python - 在逗号处拆分字符串,除非在括号环境中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808913/

相关文章:

python - 编写递归随机变量的更好方法

python - keras变分自动编码器损失函数

javascript - 在 React.js 中使用正则表达式过滤数组?

javascript - 如何使用 python lxml 提取 javascript 变量的值

c++ - 在流中的下一行之后定位迭代器的最简单方法?

python - 导入错误 : cannot import name 'image_dataset_from_directory' from 'tensorflow.keras.preprocessing' (unknown location)

python - python 编码的单词分隔符

java - 将中间子字符串转换为 "*"

Javascript正则表达式

java - JNA 如何包装用 C++ 编写的接口(interface)