Заменить все не алфавитно-цифровые исключения в скобках в Python - PullRequest
0 голосов
/ 21 февраля 2019

Я хотел бы удалить все не алфавитно-цифровые символы, кроме скобок и что между ними в питоне.

Например:

My son's birthday [[David | David Smith]] $$ (is) "today" 2019 ][

становится

My son s birthday [[David | David Smith]] is today 2019

Вот моя функция на данный момент:

def clean(texte):
    return re.sub(r"[^0-9a-zA-Z]+", " ", texte).lower()

Он заменяет все не алфавитно-цифровые, как я хочу, но заменяет квадратные скобки и трубу внутри.Я не знаю, как добавить новое регулярное выражение в метод sub и добавить новое условие.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вместо замены вы можете выбрать то, что хотите сохранить, используя чередование , чтобы либо совпадать с [[ до ]] или | совпадение 1+ раз, чем символ слова \w+, а затемсоедините части обратно в строку.

\[\[[^]]+\]\]|\w+

Это будет соответствовать

  • \[\[[^]]+\]\] совпадение от [[ до ]] с использованием отрицательного класса символов
  • | Или
  • \w+ Совпадение 1+ раз за символ слова

Regex demo | Python demo

Например:

import re
regex = r"\[\[[^]]+\]\]|\w+"
test_str = "My son's birthday [[David | David Smith]] $$ (is) \"today\" 2019 ]["
res = re.findall(regex, test_str)
print(' '.join(res))
# My son s birthday [[David | David Smith]] is today 2019
0 голосов
/ 21 февраля 2019
import re
x = "My son's birthday [[David | David Smith]] $$ (is) \"today\" 2019 ]["

def clean(texte):
    return re.sub(r"[^\[\[[^\]\]+\]\]|\w]+", " ", texte).lower()

print(clean(x))

>>> 'my son s birthday [[david | david smith]] is today 2019 ]['

Тогда вы могли бы разделить "]" и сохранить первый индекс.

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