Подтвердить что ты не робот

Регулярное выражение Java для соответствия символам _all_ whitespace

Я ищу регулярное выражение в Java, которое соответствует всем пробельным символам в String. "\ s" соответствует только некоторым, он не соответствует   и аналогичным пробелам, не связанным с ascii. Я ищу регулярное выражение, которое соответствует всем (общим) символам пробела, которые могут встречаться в Java String.

[изменить]

Чтобы уточнить: я не имею в виду последовательность строк " ". Я имею в виду символ Unicode Unicode U + 00A0, который часто представлен " ", например. в HTML и всех других символах юникода с аналогичным белым пространством meainig, например. "NARROW NO-BREAK SPACE" (U + 202F), Word joiner, закодированный в Unicode 3.2 и выше как U + 2060, "ZERO WIDTH NO-BREAK SPACE" (U + FEFF) и любой другой символ, который может быть изменен как белый, пространство.

[Ответ]

Для моего куколка, т.е. улавливая все пробельные символы, юникод + традиционный, следующее выражение выполняет задание:

[\p{Z}\s]

Ответ приведен ниже, но, поскольку он немного скрыт, я повторяю его здесь.

4b9b3361

Ответ 1

  - это только пробел в HTML. Используйте HTML-парсер, чтобы извлечь простой текст. и \s должны работать нормально.

Ответ 2

& NBSP; не является символом пробела, что касается регулярных выражений. Вам нужно либо изменить regexp, чтобы включить эти строки в дополнение к \s, например/(\ s | & nbsp; | 20)/, или предварительно проанализировать содержимое строки, чтобы получить представление данных ASCII или Unicode.

Здесь вы смешиваете уровни абстракции.

Если после тщательного перечитания вопроса вам будет предоставлен способ сопоставления всех пробельных символов, относящихся к стандартному ASCII, а также к кодовым точкам пробела, \p{Z} или \p{Zs} будет выполнять эту работу.

Вы должны действительно разъяснить свой вопрос, потому что он ввел в заблуждение многих людей (даже при правильном ответе, чтобы иметь некоторые downvotes).

Ответ 3

Вы разъяснили вопрос так, как я ожидал: вы на самом деле не ищете строковый литерал  , как многие здесь, кажется, думают и для которых решение слишком очевидно.

Ну, к сожалению, нет способа сопоставить их с помощью regex. Лучше всего включить конкретные кодовые точки в шаблоне, например: "[\\s\\xA0]".

Изменить, как показано в одном из комментариев, вы можете использовать недокументированный "\\p{Z}" для этого. Алан, не могли бы вы оставить комментарий, как вы это узнали? Это очень полезно.

Ответ 4

Вот краткое изложение, сделанное мной из нескольких конкурирующих определений "whitespace":

http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ

Возможно, вам придется явно указать дополнительные, которые вам небезразличны, которые не соответствуют одному из prefab.

Ответ 5

  не является пробелом. Это кодирующая последовательность символов, представляющая пробел в HTML. Скорее всего, вы захотите преобразовать HTML-кодированный текст в обычный текст, прежде чем запускать его сопоставление строк. Если это так, то посмотрите javax.swing.text.html

Ответ 6

Если кто-то снова столкнется с этим вопросом и ищет помощь, я предлагаю ответить следующим образом: fooobar.com/questions/49284/...

Краткая версия: \\p{javaSpaceChar}

Почему: В Класс шаблона, это отображает Character.isSpaceChar:

Категории, которые ведут себя как методы java.lang.Character boolean ismethodname (кроме устаревших), доступны через тот же синтаксис \p {prop}, где указанное свойство имеет имя javamethodname.

👍