自动转换" |"字符到换行符,但如果在括号内?

时间:2018-04-27 22:39:59

标签: python regex python-2.7

给出一个"字典"妥协的是有效正则表达式的条目,例如:

CARS?|(AUTO|BIG)?TRUCK|VEHICLE|(CRUISE|CONTAINER)? SHIP|AUTOMOTIVE

在python中,我怎样才能分离每个条目或"字典值"走上自己的路线?我不能简单地按|进行拆分,因为如果您将一个条目值视为自身(AUTO|BIG)?TRUCK,那么会破坏该值,因为它包含相同的字符。

我并不想仅仅匹配这些角色,我还试图替换它们。

1 个答案:

答案 0 :(得分:1)

这里至少有两种可能性,一种使用较新的(*SKIP)(*FAIL)机制,另一种使用函数(首先替换有问题的|):

import regex as re

expressions = r'''CARS?|(AUTO|BIG)?TRUCK|VEHICLE|(CRUISE|CONTAINER)? SHIP|AUTOMOTIVE'''

# first alternative using (*SKIP)(*FAIL)
rx = re.compile(r'\([^()]*\)(*SKIP)(*FAIL)|\|')
parts = "\n".join(rx.split(expressions))
print(parts)

# second, a function 
rx = re.compile(r'\([^()]*\)|(\|)')

def replacer(match):
    if match.group(1):
        return 'SUPERMAN'
    else:
        return match.group(0)

expressions = rx.sub(replacer, expressions)
parts = "\n".join(expressions.split('SUPERMAN'))
print(parts)

两者都会产生

CARS?
(AUTO|BIG)?TRUCK
VEHICLE
(CRUISE|CONTAINER)? SHIP
AUTOMOTIVE