Python&正则表达式:匹配所有,但不是x或y

时间:2015-10-22 12:24:20

标签: regex python-3.x

我有这样一行:

 Test, Customer Relationship (CR), 4D-, 1D-, 3D-magnetic (circuit, simulation) Edyson, test

在这些行中,我希望匹配每个逗号(,)以及一些例外:我不想匹配逗号前面带有减号( - ,)或者它是否在Brackets(...,...中) )。

因此在示例行中,只有第一个,第二个和最后一个逗号应匹配。

我知道如何匹配逗号之前没有减号:

(?<!\-)\,

但我不知道如何只匹配括号之间的逗号,我不知道如何组合规则。

这可以在正则表达式中完成吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

r'(?<!-),(?![^()]*\))'
  • (?<!-)是一个负面的背后隐藏,以避免在以连字符
  • 开头时匹配逗号
  • (?![^()]*\))是一个负面的预测,以避免在与(...)
  • 匹配时使用逗号

假设您没有不平衡的(...)文字。

RegEx Demo

示例:

>>> 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))