自动将“|”字符转换为换行符,但如果在括号内则不转换?

2024-04-29 16:56:53 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个包含有效regex的条目的“字典”,例如:

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

在python中,如何将每个条目或“dictionary值”分隔到自己的行中?我不能简单地按|分割,因为如果将一个条目值视为其本身(AUTO|BIG)?TRUCK,则会破坏该值,因为它包含相同的字符。你知道吗

我不只是想匹配这些字符,我还试图取代他们。你知道吗


Tags: 目的autodictionary字典container条目字符cars
1条回答
网友
1楼 · 发布于 2024-04-29 16:56:53

这里至少有两种可能性,一种是使用较新的(*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

相关问题 更多 >