我有这样一行:
Test, Customer Relationship (CR), 4D-, 1D-, 3D-magnetic (circuit, simulation) Edyson, test
在这些行中,我希望匹配每个逗号(,)以及一些例外:我不想匹配逗号前面带有减号( - ,)或者它是否在Brackets(...,...中) )。
因此在示例行中,只有第一个,第二个和最后一个逗号应匹配。
我知道如何匹配逗号之前没有减号:
(?<!\-)\,
但我不知道如何只匹配括号之间的逗号,我不知道如何组合规则。
这可以在正则表达式中完成吗?谢谢!
答案 0 :(得分:2)
您可以使用此正则表达式:
r'(?<!-),(?![^()]*\))'
(?<!-)
是一个负面的背后隐藏,以避免在以连字符(?![^()]*\))
是一个负面的预测,以避免在与(...)
假设您没有不平衡的(...)
文字。
示例:强>
>>> s = 'Test, Customer Relationship (CR), 4D-, 1D-, 3D-magnetic (circuit, simulation) Edyson, test'
>>> print re.sub(r'(?<!-),(?![^()]*\))', '\n', s)
Test
Customer Relationship (CR)
4D-, 1D-, 3D-magnetic (circuit, simulation) Edyson
test
答案 1 :(得分:1)
使用regex module的最后一个版本:
import regex
s=' Test, Customer Relationship (CR), 4D-, 1D-, 3D-magnetic (circuit, simulation) Edyson, test'
reg = regex.compile(r'(?:\([^)]*\)|-,)(*SKIP)(*F)|,')
print(reg.split(s))