Совпадение начального и конечного символов с использованием класса Java Matcher - PullRequest
0 голосов
/ 30 августа 2018

Я хочу получить слова из строки, которая начинается с # и заканчивается space. Я пытался использовать этот Pattern.compile("#\\s*(\\w+)"), но он не включает такие символы, как ' или :.

Я хочу получить решение только с помощью метода Pattern Matching .

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Противоположность \s равна \S, поэтому вы можете использовать регулярное выражение, например:

#\s*(\S+)

Или для Java:

Pattern.compile("#\\s*(\\S+)")

Он захватит все, что не является пробелом.

См. Демо здесь .

Если вы хотите остановиться на пробеле, а не на пробеле, измените \S на [^ ]. ^ внутри скобок означает, что он будет сводить на нет все, что будет после него.

Pattern.compile("#\\s*([^ ]+)")

См. Демо здесь .

0 голосов
/ 30 августа 2018

Мы можем попробовать сопоставить, используя шаблон (?<=\\s|^)#\\S+, который будет соответствовать любому слову, начинающемуся с #, за которым следует любое количество непробельных символов.

String line = "Here is a #hashtag and here is #another has tag.";
String pattern = "(?<=\\s|^)#\\S+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
    System.out.println(m.group(0));
}

#hashtag
#another

Демо

Примечание. Приведенное выше решение может дать вам исключительный случай пунктуации, которая появляется в конце хэштега. Если вы этого не хотите, то мы можем перефразировать регулярное выражение, чтобы оно совпадало только с определенными положительными символами, например, буквы и цифры. Но, может быть, это не беспокоит вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...