Ищем регулярное выражение, включающее буквенно-цифровые + «&» и «;»
Вопрос
Вот проблема:
split=re.compile('\\W*')
Это регулярное выражение отлично работает при работе с обычными словами, но бывают случаи, когда мне нужно, чтобы выражение включало такие слова, как käyttäj&aml;auml;
.
Что мне следует добавить в регулярное выражение, чтобы включить &
и ;
персонажи?
Решение
Вероятно, вы захотите решить проблему наоборот, т.е.найти весь символ без пробелов:
[^ \t\n]*
Или вы хотите добавить дополнительные символы:
[a-zA-Z0-9&;]*
Если вы хотите сопоставить объекты HTML, попробуйте что-то вроде:
(\w+|&\w+;)*
Другие советы
Я бы рассматривал сущности как единое целое (поскольку они также могут содержать числовые коды символов), в результате чего получилось следующее регулярное выражение:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Это соответствует
- либо словесный символ (включая «
_
"), или - HTML-объект, состоящий из
- персонаж "
&
”,- персонаж "
#
”,- персонаж "
x
», за которым следует хотя бы одна шестнадцатеричная цифра, или - хотя бы одну десятичную цифру или
- персонаж "
- хотя бы одна буква (= именованный объект),
- персонаж "
- точка с запятой
- персонаж "
- Хотя бы один раз.
/РЕДАКТИРОВАТЬ:Спасибо ΤΖΩΤΖΙΟΥ за указание на ошибку.
вам следует создать класс символов, который будет включать дополнительные символы.Например:
split=re.compile('[\w&;]+')
Это должно сработать.Довожу до вашего сведения
\w
(строчная буква «w») соответствует символам слова (буквенно-цифровым)\W
(заглавная W) — отрицательный класс символов (то есть он соответствует любому небуквенно-цифровому символу)*
соответствует 0 или более раз и+
соответствует один или несколько раз, поэтому*
будет соответствовать чему угодно (даже если там нет символов).
Похоже, это сработало:
Split=re.compile('(\\W+&\\W+;)*')
Спасибо за предложения.Большинство из них отлично работали на Reggy, но я не совсем понимаю, почему у них не получилось перекомпилировать.