Я хочу, чтобы мое регулярное выражение содержало все буквенно-цифровые символы на английском и латинском языках.
re.sub('[^A-Za-z0-9-/().&\' ]+', '',"L'Oréal")
должен сохраняться у L'Oréal
В настоящее время это дает мне L'Oral
Есть ли какая-либо латинская кодировка, которую нужно добавить?
Вы можете использовать
re.sub(r"[^-/().&' \w]|_", "", s)
Регулярное совпадение
[^-/().&' \w]
- инвертированное класс символов соответствует любому полукокса, но слово символ, -
, /
, (
, )
, .
, &
, '
и пространство|
- или же_
- символ подчеркивания (он является частью \w
, поэтому его следует добавить в качестве альтернативы).Почему бы не добавить диапазон Unicode для всех латинских символов в ваше регулярное выражение?
r"[\u00C0-\u017F]"
Будет соответствовать всем вашим диакритически расширенным символам Юникода, используя латинские алфавиты. Оттуда просто добавьте остальные параметры того, что вы ищете.
Я думаю, что это решит вашу проблему:
re.sub('[(?>\P{M}\p{M}*)+]', '',"L'Oréal")
И результат будет:
L'Oréal
re.sub(r'[\W_]+', '', s)
. Ваш заголовок и регулярное выражение с ожидаемым результатом в теле вопроса не синхронизированы, поскольку у вас, похоже, также есть некоторые специальные символы. Попробуйтеre.sub(r"(?![-/().&'])[\W_]', '', s)