我有一个python脚本。它使用了一些正则表达式。我想拆分字符串s,但是逗号,同时忽略括号内的任何逗号。
s = """aa,bb,(cc,dd),m(ee,ff)"""
splits = re.split(r'\s*(\([^)]*\)|[^,]+)', s, re.M|re.S)
print('\n'.join(splits))
Actual output:
aa
,
bb
,
(cc,dd)
,
m(ee
,
ff)
Desired output:
aa
bb
(cc,dd)
m(ee,ff)
所以我不能让它处理括号外的文本。希望有人能帮我。
4条答案
按热度按时间js5cn81o1#
您可以使用此正则表达式进行拆分:
RegEx Demo
,
:匹配逗号(?![^()]*\))
:一个否定的前瞻Assert,通过Assert在0个或多个非括号字符之后没有)
,确保我们不匹配(...)
中的逗号。xvw2m8pv2#
考虑改用
findall
-重复匹配(
、后跟非)
字符、后跟)
或匹配非,
字符的组:如果速度是一个问题,可以通过将
(
放入另一个负字符集并首先交替使用它来使它更有效一些:j5fpnvbx3#
我需要做类似的事情,但我也有嵌套的括号。建议的正则表达式不处理嵌套。
我找不到正则表达式的解决方案,但这里有一个python函数的解决方案,可以实现同样的效果:
ffdz8vbo4#
尝试:r',([^,()][(][^()][)][^,])|([^,]+)'
在regex101上测试:https://regex101.com/r/pJxRwQ/1