замена скобок на регулярное выражение в Python - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь заменить круглые скобки рядом с цифрой или одной буквой (1), (a) на 1. и 2. Я хочу оставить более длинные слова на месте (preshenderit)

Это то, что я пробовал. Полный стоп появляется с обеих сторон всех бывших скобок, когда я хочу, чтобы он появлялся только один раз.

Спасибо


import re

text = '''Lorem ipsum dolor sit amet,\n\n(1)consectetur adipiscing elit, sed do eiusmod tempor incididunt\n\n(2)ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip\n\n(a) ex ea (commodo consequat). Duis aute irure dolor in (reprehenderit) in voluptate velit esse cillum dolore eu\n\n(b) fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'''

result = re.sub(r'[\(\)]','.\1', text)

Print(result)

Что я получаю:

Lorem ipsum dolor sit amet,

.1. consectetur adipiscing elit, sed do eiusmod tempor incididunt

.2. ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip

.a. ex ea .commodo consequat.. Duis aute irure dolor in .reprehenderit. in voluptate velit esse cillum dolore eu

.b. fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Я ищу:

Lorem ipsum dolor sit amet,

1. consectetur adipiscing elit, sed do eiusmod tempor incididunt
2. ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
    a. ex ea (commodo consequat). Duis aute irure dolor in (reprehenderit) in voluptate velit esse cillum dolore eu
    b. fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Вы фактически удаляете любые ( и ) с точкой и символ с восьмеричным кодом \001.

Если вы хотите заменить (...) в начале строки одной буквой или цифрой внутри, используйте

result = re.sub(r'^\(([\da-z])\)', r'\1. ', text, flags=re.M)

См. это демо регулярных выражений . Обратите внимание на использование ^, которое разрешает сопоставление только в начале строки (оно работает вместе с флагом flags=re.M).

Для удаления при наличии 1+ цифр или букв используйте

result = re.sub(r'^\((\d+|[a-z]+)\)', r'\1. ', text, flags=re.M)

См. Демоверсию regex . Здесь

  • ^ - соответствует началу строки
  • \( - ( char
  • (\d+|[a-z]+) - 1 или более цифр или 1 или более букв
  • \) - ) char.
0 голосов
/ 11 июня 2019

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


# find all (1), (2) and replace with 1., 2.
re.sub(r'\(([\d])\)', r'\1.  ', text)

# find all (a), (b) and replace with a., b.
re.sub(r'\(([\(a-z)])\)', r'\1.  ', text)

# find both (1), (2), (a), (b) and replace with 1., 2., a., b.
re.sub(r'\(([\da-z])\)', r'\1. ', text)
0 голосов
/ 11 июня 2019
result = re.sub(r'\(([0-9a-z])\)', r'\1. ', text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...