Составление шаблона для регулярных выражений

Имеется строка, например "a, bc1d, fe'g h23q d". Нужно подобрать такой шаблон, что будет возвращена строка (вернее, будут найдены совпадения): "a" "bc" "d" "fe'g" "h" "q" "d". Иными словами, из любого предложения нужно выделить только слова (слова с апострофом it's выводятся как одно "it's"), минуя все остальные символы (специальные, знаки препинания, числа и пробелы). Задача в целом несложная, мне удалось написать такой шаблон (язык C#, однако синтаксис регулярных выражений в целом похож во многих языках):

var myFilter = new Regex(@"\w+[']\w|\w+(?!\d)");

Его недостаток в том, что он не считает числа разделителями. Подскажите, как это исправить?


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Шаблон \w (=[\p{L}\p{Nd}\p{Mn}\p{Pc}]) находит буквы, цифры, знаки подчёркивания и диакритические знаки (см. документацию).

Чтобы найти только буквы, используйте \p{L}:

\p{L}+(?:'\p{L}+)*

См. пример работы регулярного выражения.

  • \p{L}+ - одна и более букв
  • (?:'\p{L}+)* - ноль и более повторов последовательности ' и одной и более букв.
→ Ссылка