我想得到一个正则表达式,它可以判断两个给定的单词是否在一个句子中(单词顺序很重要)。问题是我可以在一个句子中收缩,所以句号并不表示句子的结尾。表示句子结尾的正则表达式部分是
\.(\s+[A-Z]|\s*$)
有人可以帮助我构建整个正则表达式吗?
谢谢你的帮助。
答案 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)
答案 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]应该是[^ \。]或可能的字符列表。