Regex заменяет все, кроме множественного вхождения группы - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь найти правильное регулярное выражение, чтобы заменить что-либо в строке, но группу, которой предшествует определенный шаблон.

Предположим, у меня есть такие записи:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Lorem ipsum duo dolores, tempor et ea rebum.
L. i. sed diam; duo dolores. Lorem ipsum tempor et ea. Duo dolores
L.i. nonumy eirmod tempor et ea rebum. L. i. consetetur sadipscing.

Я хочу заменить что-либо в строках, но то, что предшествует вариант Lorem Ipsum. Я sh получу следующий результат:

dolor sit amet; duo dolores
sed diam; tempor et ea
nonumy eirmod tempor et ea rebum; consetetur sadipscing

Я попытался использовать следующий код для захвата группы, но не смог перехватить второе вхождение группы.

'.*((Lorem ipsum)|(L\. *i\.)) ([0-9A-Za-z]+)+.*','\4; '

Я подозреваю, что это связано со вторым .* среди других причин. Я пытаюсь сделать это в Oracle 11g, но я не против сделать это с Python.

1 Ответ

2 голосов
/ 27 марта 2020

Чтобы определить отдельные строки:

# Regex Pattern
pattern = r'(?:(Lorem ipsum )|(L\.\s?i\. ))(.*?)(?=[^\w\s])'

# Find matching string
result = [m[2] for m in re.findall(pattern, s, re.I)]

# Pattern matches
print('\n'.join(result))

print('\nFormatted into pairs')

# Display as pairs
#    Group into pairs
m = ['; '.join([result[i], result[i+1]]) for i in range(0, len(result), 2)]

#    Print Pairs
print('\n'.join(m))

Выход

Соответствующие шаблоны

dolor sit amet
duo dolores
sed diam
tempor et ea
nonumy eirmod tempor et ea rebum
consetetur sadipscing

Отформатировано в пары

dolor sit amet; duo dolores
sed diam; tempor et ea
nonumy eirmod tempor et ea rebum; consetetur sadipscing

Пояснение

Использование шаблона:

pattern = r'(?:(Lorem ipsum )|(L\.\s?i\. ))(.*?)(?=[^\w\s])'

(?:(Lorem ipsum )|(L\.\s?i\. )) - non capturing group for variants of Loren ipsum
(.*?) - 'non-greedy' match any characters
(?=[^\w\s]) - lookahead to stop on non-word or space character
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...