正则表达式用一句话给出两个单词

时间:2010-02-18 08:49:09

标签: c# regex

我想得到一个正则表达式,它可以判断两个给定的单词是否在一个句子中(单词顺序很重要)。问题是我可以在一个句子中收缩,所以句号并不表示句子的结尾。表示句子结尾的正则表达式部分是

\.(\s+[A-Z]|\s*$)
有人可以帮助我构建整个正则表达式吗? 谢谢你的帮助。

5 个答案:

答案 0 :(得分:3)

你可以用这个:

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

这基本上是说,匹配和捕获一个单词,然后是任何不是句号的句子,或者一个句点跟随一个空格,任意次,最后匹配并捕获另一个单词。

编辑:对于给定的字词,请使用:

(\bWord1\b)(?:[^.]|\.\s)*(\bWord2\b)|(\bWord2\b)(?:[^.]|\.\s)*(\bWord1\b)

答案 1 :(得分:0)

不是c#,但你应该明白这个想法

for sentence in split_text_with_regex(text):
    index_word1 = sentence.find(word1)
    index_word2 = sentence.find(word2)
    # do your thing

答案 2 :(得分:0)

这里有一套非常好的选项http://www.regular-expressions.info/near.html

答案 3 :(得分:0)

您也可以在Visual Studio中构造正则表达式。请参阅此链接http://msdn.microsoft.com/en-us/library/2k3te2cs(VS.80).aspx第一段

答案 4 :(得分:0)

所以我觉得它是这样的(未经测试):

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

编辑:考虑一下,这与标点符号(逗号,撇号)不匹配。也许每个[\ w \ s]应该是[^ \。]或可能的字符列表。