给出一个"字典"妥协的是有效正则表达式的条目,例如:
CARS?|(AUTO|BIG)?TRUCK|VEHICLE|(CRUISE|CONTAINER)? SHIP|AUTOMOTIVE
在python中,我怎样才能分离每个条目或"字典值"走上自己的路线?我不能简单地按|
进行拆分,因为如果您将一个条目值视为自身(AUTO|BIG)?TRUCK
,那么会破坏该值,因为它包含相同的字符。
我并不想仅仅匹配这些角色,我还试图替换它们。
答案 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