Regex два заданных слова в одном предложении - PullRequest
1 голос
/ 18 февраля 2010

Я хочу получить регулярное выражение, которое может сказать, находятся ли два заданных слова в одном предложении (порядок слов имеет значение). Проблема в том, что у меня может быть сжатие в предложении, поэтому точка не означает, что предложение заканчивается. Часть регулярного выражения, которая указывает конец предложения,

<code>\.(\s+[A-Z]|\s*$)
Может ли кто-нибудь помочь мне построить целое регулярное выражение? Спасибо за вашу помощь.

Ответы [ 5 ]

3 голосов
/ 18 февраля 2010

Вы можете использовать это:

(\b\w+\b)(?:[^.]|\.\s)*(\b\w+\b)

Это в основном говорит: сопоставьте и поймайте слово, затем все, что не является точкой или периодом, следующим за пробелом, любое количество раз, и, наконец, сопоставьте и захватите другое слово.

РЕДАКТИРОВАТЬ: Для дано слов в любом порядке, используйте:

(\bWord1\b)(?:[^.]|\.\s)*(\bWord2\b)|(\bWord2\b)(?:[^.]|\.\s)*(\bWord1\b)
0 голосов
/ 18 февраля 2010

Так что я думаю, что-то вроде этого (не проверено):

(([\w\s]*\s)?Word1\s([\w\s]*)?\sWord2(\s[\w\s]*)?\.)(?=(\s+[A-Z]|\s*$))

Редактировать: Думая об этом, это не будет соответствовать пунктуации (запятые, апострофы). Возможно, каждый [\ w \ s] должен быть [^ \.] Или список возможных символов.

0 голосов
/ 18 февраля 2010

Здесь есть очень хороший набор опций http://www.regular -expressions.info / near.html

0 голосов
/ 18 февраля 2010

Также вы можете создавать регулярные выражения в самой Visual Studio. Ссылка на эту ссылку http://msdn.microsoft.com/en-us/library/2k3te2cs(VS.80).aspx первый абзац

0 голосов
/ 18 февраля 2010

Не c #, но вы должны понять

for sentence in split_text_with_regex(text):
    index_word1 = sentence.find(word1)
    index_word2 = sentence.find(word2)
    # do your thing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...