Регулярное выражение для замены "/" на "ИЛИ" - PullRequest
0 голосов
/ 05 марта 2020

Я написал код для замены / на OR (я не особенно хорош с regex)

import re
def replace_or_symbol(summary=""):
    return re.sub("([A-Z])\/(?=[A-Z])", " OR ", summary)


print(replace_or_symbol(summary="AND/NOT AND"))
print(replace_or_symbol(summary="AND//NOT AND"))

Он печатает вывод:

AN OR NOT AND
AND//NOT AND

В выводе D отсутствует в AND.

Вопрос : Как я могу изменить код, который может пропустить D в AND?

Примечание : // Не следует заменять на OR

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Вы должны использовать первую группу захвата \\1 OR в замене, потому что эта часть ([A-Z]) захватывает символ верхнего регистра.

Regex demo | Python демо

import re

def replace_or_symbol(summary=""):
    return re.sub("([A-Z])\/(?=[A-Z])", "\\1 OR ", summary)


print(replace_or_symbol(summary="AND/NOT AND"))
print(replace_or_symbol(summary="AND//NOT AND"))

Выход

AND OR NOT AND
AND//NOT AND
1 голос
/ 05 марта 2020

Ваш шаблон ([A-Z])\/(?=[A-Z]) соответствует алфавиту и '\'

, вам нужно добавить это как lookbehind (?<=[A-Z])\/(?=[A-Z])

, если необходимо заменить более одного '/', следуя можно использовать шаблон:

(?<=[A-Z])\/+(?=[A-Z])

'+' - для соответствия одному или нескольким '/'

0 голосов
/ 05 марта 2020

Это должно сделать работу

(?<!\/)\/(?!\/)

демо https://regex101.com/r/WESubF/2

И заменить на «ИЛИ»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...