2009-05-30 4 views
1

Я пытаюсь использовать Regex в C# для поиска списка ключевых слов в кучке текста. Однако я хочу быть очень конкретным в отношении того, что может быть «окружающим» текстом для чего-то, что можно считать ключевым словом.Regex keywords

Так, например, ключевое слово «привет» должно быть найдено в (привет), привет., Привет <, но не в hellothere.

Основная проблема заключается в том, что я НЕ ОБРАЩАЮВАЮТ разделители, если ключевое слово - это первое слово или последнее слово, это нормально. Я предполагаю, что другой способ взглянуть на это состоит в том, что начало файла и конец файла должны быть приемлемыми разделителями.

Я новичок в Regex, поэтому я надеялся, что кто-то может помочь мне получить шаблон правильно. До сих пор у меня есть:..

[ <(.]+?keyword[<(.]+? 

< где, (, некоторые примеры сепараторов и ключевое слово, конечно, ключевое слово Я ищу

Заранее спасибо

ответ

-1

Я думаю, что вы хотите что-то вроде:

(^$|[ <(.])+?keyword($|[<(.]+?) 

в ^ и $ символы символизируют начало и конец входного текста, соответственно (If. Вы указываете опцию Multiline, он совпадает с начала/конца строки, а не текст, но, казалось бы, хотите вариант Singleline.)

+0

Singleline позволяет '.' (точка) метасимволы соответствуют символу-разделителю символов (\ r и \ n); это не повлияет на это регулярное выражение, поскольку единственные точки находятся в классах символов, где они все равно будут совпадать с точками. –

+0

@Alan: Моя точка зрения была только в том, что опция Singleline/Multiline изменяет значение '^' и '$', а не '.' В вопросе указывается, что OP специально хочет обнаружить' .' в качестве разделителя. – Noldorin

+0

Похоже, вы думаете о Singleline и Multiline, как о противоположных состояниях одного режима переключения. Имена, кажется, подразумевают столько же, но на самом деле они полностью независимы: Singleline изменяет значение «.». и Multiline изменяет значение «^» и «$». «Singleline» всегда была неудачным именем; некоторые вкусы называют его DOTALL-режимом, что намного более наглядно. –

0

Вы хотите посмотреть в word boundary (\ б), чтобы избежать совпадения ключевые слова, которые появляются как часть другого слова (как в вашем примере hellothere).

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

3

Вы можете использовать word boundary якорь:

\bkeyword\b 

который найдет ваше ключевое слово только тогда, когда не является частью большего слова.