Составление шаблона для регулярных выражений
Имеется строка, например "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 шт):
Шаблон \w (=[\p{L}\p{Nd}\p{Mn}\p{Pc}]) находит буквы, цифры, знаки подчёркивания и диакритические знаки (см. документацию).
Чтобы найти только буквы, используйте \p{L}:
\p{L}+(?:'\p{L}+)*
См. пример работы регулярного выражения.
\p{L}+- одна и более букв(?:'\p{L}+)*- ноль и более повторов последовательности'и одной и более букв.