Python: Как сохранить буквенно-цифровые символы английского, латинского алфавита в регулярном выражении?

1

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

re.sub('[^A-Za-z0-9-/().&\' ]+', '',"L'Oréal")

должен сохраняться у L'Oréal

В настоящее время это дает мне L'Oral

Есть ли какая-либо латинская кодировка, которую нужно добавить?

  • 0
    Может быть, вы хотите сохранить все буквы и цифры? re.sub(r'[\W_]+', '', s) . Ваш заголовок и регулярное выражение с ожидаемым результатом в теле вопроса не синхронизированы, поскольку у вас, похоже, также есть некоторые специальные символы. Попробуйте re.sub(r"(?![-/().&'])[\W_]', '', s)
  • 0
    @ WiktorStribiżew Решение правильное, но я думаю, что оно синтаксически неверно. Его пропущенные пробелы вокруг побитового оператора или оператора сдвига
Показать ещё 3 комментария
Теги:
python-3.x

3 ответа

1
Лучший ответ

Вы можете использовать

re.sub(r"[^-/().&' \w]|_", "", s)

См. Демо-версию regex

Регулярное совпадение

  • [^-/().&' \w] - инвертированное класс символов соответствует любому полукокса, но слово символ, -, /, (, ), . , &, ' и пространство
  • | - или же
  • _ - символ подчеркивания (он является частью \w, поэтому его следует добавить в качестве альтернативы).
0

Почему бы не добавить диапазон Unicode для всех латинских символов в ваше регулярное выражение?

r"[\u00C0-\u017F]"

Будет соответствовать всем вашим диакритически расширенным символам Юникода, используя латинские алфавиты. Оттуда просто добавьте остальные параметры того, что вы ищете.

0

Я думаю, что это решит вашу проблему:

re.sub('[(?>\P{M}\p{M}*)+]', '',"L'Oréal")

И результат будет:

L'Oréal

Ещё вопросы

Сообщество Overcoder
Наверх
Меню