Автоматически конвертировать "|" символ новой строки, но не в скобках? - PullRequest
0 голосов
/ 28 апреля 2018

Учитывая "словарь", скомпрометированный из записей, которые являются действительными регулярными выражениями, например ::

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

В Python, как я могу разделить каждую запись или "значение словаря" на свою собственную строку? Я не могу просто разделить на |, потому что если вы посмотрите на одно значение записи как на само по себе, (AUTO|BIG)?TRUCK, это сломает значение, потому что оно содержит тот же символ.

Я не пытаюсь просто сопоставить эти символы, я также пытаюсь заменить их.

1 Ответ

0 голосов
/ 28 апреля 2018

У вас есть как минимум две возможности: одна использует более новый механизм (*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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...