регулярное выражение выбрать только полное слово - PullRequest
0 голосов
/ 01 марта 2011

Мне нужно выбрать только полное слово, используя регулярное выражение, я не хочу выбирать слово, если оно содержится в другом слове, но я хочу выбрать, начинается ли оно / заканчивается специальными символами, такими как _test, test., тест /, тест.

Пример: я не хочу выбирать, содержится ли слово в другом слове, например "контекст", если я ищу "текст". Но хотите, если я ищу полный текст, /text,text.,text_test, text, text.

РЕДАКТИРОВАТЬ: Поскольку мы не можем определить формы множественного числа, я удаляю эту часть.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Во-первых, вы получите много пользы от завершения учебника, такого как этот: http://www.codeproject.com/KB/dotnet/regextutorial.aspx А Expresso - отличный бесплатный инструмент для отладки и тестирования регулярных выражений.

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

\ б ([^ A-Za-Z] | A-Za-г [^ A-Za-Z] +) (текст) ([^ A-Za-Z] | [^ A-Za-Z] + A-Za-г ) \ б

\ b границы слов

([^ A-Za-z] | A-Za-z [^ A-Za-z] +) означает «не альфа-символы ИЛИ альфа-символы, за которыми следует хотя бы один не-альфа» символ "

«текст» будет соответствовать подгруппе 2.

Опять же, пройдитесь по уроку выше, он короткий, и вы, вероятно, могли бы выяснить, как создать это выражение за время, которое требуется, чтобы получить ответ здесь.

2 голосов
/ 01 марта 2011

Если вы ищете слово, содержащееся в переменной word, я предлагаю вам использовать

"\\b\\Q" + word + "\\E\\b"

Вот разбивка:

  • \b: граница слова
  • \Q: Ничего, кроме кавычек всех символов до \ E
  • \E: Ничего, кроме окончания цитирования, начатого \ Q

Нечто подобное может сделать:

Pattern p = Pattern.compile("\\b\\Q" + word + "\\E\\b");
Matcher m = p.matcher("word like \"context\" while looking for \"text\".");
while (m.find())
    System.out.println(m.group());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...