遇到特殊字时停止 - 正则表达式

时间:2017-05-18 14:52:29

标签: regex

我正在寻找特定正则表达式的帮助:(THE_WORD_I_WANT_TO_FIND)[^.?!\w]+([^.?!\s]+[^.?!\w]+){0,NUMBER_OF_WORDS}(MY_WORD_AT_END)

要解释一下,我正在寻找另一个词之前的特定词。我有一些条件,我想界定WORD_AT_END所在的句子以及之前的特定数字。

这个正则表达式完成了这项工作,但我想添加一个句子分隔符:(\s\-\s)(除了。?!)。

示例:

Blablabla. A full Reference - Help is available in the Library, or watch the video Tutorial.

正则表达式:(Help)[^.?!\w]+([^.?!\s]+[^.?!\w]+){0,}(watch)匹配且(Reference)[^.?!\w]+([^.?!\s]+[^.?!\w]+){0,}(watch)必须匹配...

你能帮我吗?

谢谢!

解决方案(感谢@MostafaHussein):

(Help)((?!\s-\s)\s(([\w|\w-|\pL|\pL-])+(?!\s-\s)\s+){0,})?(watch)

  

这里,-是句子分隔符,如果它被两个空格包围。

1 个答案:

答案 0 :(得分:2)

以下正则表达式:

(Help)\s(?!-)(?s).+?(watch)

仅匹配:

Help is available in the Library, or watch

而不是:

Reference - Help is available in the Library, or watch

因为在指定的第一个单词后跟一个空格后会找到-,例如Reference -

更新

这个正则表达式将匹配任何句子,只要它不包含-(它必须被白色空格包围)

Help((?!\s-\s)\s(([\w|\w-|\pL|\pL-])+\s+){0,7})?watch

Demo URL

注意:在watch之前必须有正好7个单词而不计算Help如果有-被空格包围则没有任何匹配,也考虑了unicode字母字符如果有ê之类的内容将被正确匹配。