Как сделать REGEX (Groovy), чтобы выделить слова "She", "Shell" с помощью REGEX = "She"? - PullRequest
3 голосов
/ 11 марта 2011

Я новичок на REGEX, я пытаюсь получить только слова "Она" и "Оболочка", но не пепел с помощью этой программы (Groovy). Я работаю над этим в течение некоторого времени.

saying = 'She wishes for Shells not ashes'
println saying
def pattern = ~/\bShe*\b/
def matcher = pattern.matcher(saying)
def count = matcher.getCount()
println "Matches = ${count}"
for (i in 0..<count) {
    print matcher[i] + " "
}

Выход: Она желает, чтобы ракушки не были пеплом Матчи = 1 Она

REGEX не работает как Windows CMD, например, dir W *, чтобы список папок или файлов начинался с W. Что я сделал не так?

Большое спасибо, когда ответите на этот вопрос

1 Ответ

4 голосов
/ 11 марта 2011

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

Это квантификатор , который изменяет все, что находится непосредственно перед ним, и означает «ноль или более». Ваше регулярное выражение соответствует Sh, за которым следует ноль или более e. Так что это будет соответствовать этим строкам:

Sh
She
Shee
Sheee
etc...

Что вы, вероятно, имеете в виду, это \w*, чтобы соответствовать любым символам слова.

/\bShe\w*\b/

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

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