java символы шаблона регулярного выражения

Я ищу шаблон регулярного выражения в Java, который соответствует всем символам, кроме букв от a до z.

Другими словами, мне нужен шаблон регулярного выражения, соответствующий таким символам, как

 !"#¤%&/()=?`´\}}][{€$@

Или какой-то способ обрезать строку только буквами.

В качестве примера рассмотрим следующую строку:

 "one!#"¤%()=) two}]}[()\ three[{€$"

to:

 "one two three"

person James Ford    schedule 29.02.2012    source источник
comment
Означают ли все символы также юникод?   -  person anubhava    schedule 29.02.2012
comment
@anubhava Это должно: обратите внимание, что он включил ¤ и и и в свою строку.   -  person tchrist    schedule 29.02.2012


Ответы (4)


Версия Unicode будет

\PL

\PL — это все кодовые точки Юникода, которые не имеют свойства "Буква".

\pL будет аналогом всех кодовых точек Unicode, которые имеют свойство "Letter".

Может быть, вы можете указать здесь, на сайте Regular-expressions.info, некоторые свойства, соответствующие вашим потребностям. лучше.

Вы также можете комбинировать их в классы символов, так же, как если бы вы работали с предопределенными классами, например.

[^\pl\pN]

Будет соответствовать любому символу, который не является буквой или числовым символом digit в Unicode.

person stema    schedule 29.02.2012
comment
Технически \pN включает нецифры. \p{Nd} - это просто десятичные цифры. \pN также включает \p{Nl} для буквенных чисел, таких как римские цифры, и \p{No} для таких вещей, как обычные дроби, верхние и нижние индексы. Я все равно проголосовал за вас, потому что у вас определенно есть правильная идея. Кстати, похоже, он хочет сохранить места. Я не знаю, означает ли это какой-либо пробел Unicode или просто буквальный пробел. - person tchrist; 29.02.2012
comment
@tchrist, конечно, ты прав. Правильным термином был числовой символ, и я написал цифру. - person stema; 29.02.2012

В качестве примера рассмотрим следующую строку:

 "one!#"¤%()=) two}]}[()\ three[{€$"

to:

 "one two three"

Необходимый шаблон должен соответствовать всему, что не является ни буквой, ни разделителем. В противном случае вы получите "onetwothree" вместо "one two three", которое вы просили.

[^\pL\pZ]
person tchrist    schedule 29.02.2012

[^a-zA-Z] — это класс символов, который соответствует всем символам, кроме букв от a до z в нижнем или верхнем регистре.

person Richard    schedule 29.02.2012
comment
Разве это не превратит naïve в nave? - person tchrist; 29.02.2012
comment
@tchrist да - это то, что указал спрашивающий, не так ли? (конечно, он тоже забыл пробелы — да ладно) - person Code Jockey; 29.02.2012

Простейшая форма: [^a-z]

Также может быть [^a-zA-Z], если вы хотите также удалить прописные буквы.

person huelbois    schedule 29.02.2012
comment
Итак, как бы я обрезал строку, скажем, одну?! два# три,.][ на один два три? - person James Ford; 29.02.2012
comment
Разве это не превратит façade в faade? - person tchrist; 29.02.2012
comment
@tchrist Я так думаю - я думаю, это зависит от того, какой язык вы анализируете - например, если вы анализируете старый добрый американский английский, вам, вероятно, не придется беспокоиться о могилах, седильях, умляутах, циркумфлексах и как не слишком много, я считаю. - person Code Jockey; 29.02.2012
comment
@CodeJockey Это неправда! Правильно написанный английский язык обязательно включает диакритические знаки! Оксфордский английский словарь подтверждает такие английские слова, как: Allerød, après-ski, букмол, бюстгальтер, канья, крем, креп, désœuvrement, Fabergé, façade, fête, feuilleté, flugelhorn, flugelhorn, Gödelian, jalapeño, Madrileño, Möbius, Mohorovičić прерывистость, муар, наив, Niçoise, piñon, plaçage, prêt-à-porter, Provençal, Schrédingrökñera, Ragйnökñera кошка, шиджо, смёрреброд, вечер, тапинада, викунья, визави, зуни, α-кетоизовалериановая, (α-) липоевая, (β-) норникотин и ψ-ионон. - person tchrist; 29.02.2012
comment
Описывается ли Оксфордский словарь английского языка старый добрый американский английский язык или это более правильная форма английского языка? Я знаю, что многие рукописи, особенно старые, содержат всевозможные диакритические знаки. (некоторые даже используют f вместо s???) Международные сопоставления для клавиатур также включают возможность легко добавлять диакритические знаки для тех, кто хочет правильно украсить свои набранные символы (лично я просто открываю «карту символов») — большинство сообщений на форуме на Однако сайты на американском английском не содержат диакритических знаков. Опять же, это зависит от того, что вы анализируете, и от фасада, который авторы намеревались изобразить. - person Code Jockey; 29.02.2012
comment
@tchrist, возможно, мне следовало использовать что-то вроде народного, ублюдочного английского или общеупотребительного написания - я призываю вас найти человека, который добавляет диакритические знаки к своим текстовым сообщениям на английском языке - хотя я уверен, что кто-то там это делает .. , Я часто стараюсь правильно расставлять знаки препинания и заглавные буквы в своих текстовых сообщениях для ясности. - person Code Jockey; 29.02.2012
comment
@tchrist позвольте нам продолжить это обсуждение в чате - person Code Jockey; 29.02.2012
comment
@CodeJockey Еще Брингхерст: «К 600-символьному глобализованному латинскому алфавиту математики, грамматики, химики и даже типографы склонны вносить дополнения: арабские цифры, знаки препинания, технические символы, буквы, заимствованные из иврита, греческого языка и кириллицы, [. ..] [A]авторы, редакторы, типографы и простые граждане, которые просто хотят уметь писать по буквам Дворжака, Милоша, Мони или аль-Фараби, или цитировать строки Софокла или Пушкина, или Веды или сутры или псалмы, или написать φ ≠ π, являются бенефициарами этой всеобъемлющей системы». - person tchrist; 29.02.2012
comment
@tchrist: та же проблема на французском языке. Долгое время технически (печать, компьютеры) было невозможно использовать акценты (например) в прописных буквах. Теперь, когда это возможно на каждом компьютере (но не всегда понятно, как это сделать), люди склонны думать, что диакритические знаки не требуются в верхнем регистре. Кстати, в моем Debian с французской конфигурацией grep [a-z] также выполняет grep ï (но, конечно, не Ï). - person huelbois; 29.02.2012
comment
@huelbois Соответствующие академии французского и испанского языков говорят вам, что нужно сохранять диакритические знаки даже в верхнем регистре, но, увы, люди все равно часто их опускают. Это очень красивая конфигурация Debian, если ваш [a-z] на самом деле включает французские à, â, ç, é, è, ê, ë, î, ï, ô, œ, û, ù, ü. Обычно я просто использую \pL для написания программ, которые не зависят от локали, поскольку поддержка локалей между поставщиками очень ненадежна, а затем, при необходимости, указываю точный французский [àâçéèêëîïôœûùü] в другом месте. Я предпочитаю работать в NFD, а не в NFC, поэтому \pL\pM*+. - person tchrist; 29.02.2012