【问题标题】:Automatically convert "|" character to a newline, but not if within parentheses?自动转换“|”换行符,但如果在括号内则不行?
【发布时间】:2018-04-27 22:39:58
【问题描述】:

给定一个包含有效正则表达式条目的“字典”,例如:

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

在 python 中,我怎样才能将每个条目或“字典值”分开到自己的行中?我不能简单地按| 进行拆分,因为如果您将一个条目值视为其本身,(AUTO|BIG)?TRUCK,则会破坏该值,因为它包含相同的字符。

我不只是试图匹配这些字符,我还试图替换它们。

【问题讨论】:

标签: python regex python-2.7


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多