正则表达式匹配直到文本结束

时间:2016-09-14 15:45:38

标签: regex

我使用Regex匹配包含特定字符串的文本中的整个句子。只要句子以任何标点符号结束,这都可以正常工作。但是当句子在文本的末尾没有任何标点时,它不起作用。

这是我目前的表达方式:

 [^.?!]*(?<=[.?\s!])string(?=[\s.?!])[^.?!]*[.?!]

适用于:

  

这是字符串的句子。更多文字。

不起作用:

  

更多文字。这是一个带有字符串

的句子

有没有办法按照预期说出这个词?我找不到&#34;文本结尾&#34;。

的任何字符类

4 个答案:

答案 0 :(得分:2)

文本结尾由锚$匹配,而不是字符类。

您需要解决两个不同的问题:(1)直接在字符串之后结束的句子,以及(2)在字符串之后的某个时间结束的句子但没有句末标点符号。

要执行此操作,您需要在string可选后进行匹配,但是匹配到字符串末尾的锚点。这也意味着,在识别(可选的)句末标点符号后,您需要匹配后面的所有内容,因此字符串结尾的锚点将​​匹配。

我的更改:在原始正则表达式中string之后的所有内容并将其包围在(?:...)?中 - (?:...)是一个“未记住”的群组,?使整个组可选。然后使用$来锚定字符串的结尾。

在该可选组中,您还需要将句子尾部本身设为可选,将简单[.?!]替换为(?:[.?!].*)? - 再次,(?:...)即可“未记住的”群组,?会使群组成为可选群组 - .*允许此内容在找到句子结尾后尽可能多地匹配。

[^.?!]*(?<=[.?\s!])string(?:(?=[\s.?!])[^.?!]*(?:[.?!].*)?)?$

答案 1 :(得分:1)

文字结尾的符号为$(如果您需要的话,文字开头的符号为^)。

您可能只是将$添加到您的标点符号列表中(例如[.?!$]),但您可能无法获得您正在寻找的内容;您会发现它可以更好地作为替代选择:([.?!]|$)

答案 2 :(得分:0)

你的正则表达式太复杂了,无法实现。

仅匹配单词只需使用

"\bstring\b"

它将匹配start,end和任何非alphanum分隔符。

它适用于以下内容:

string is at the start
this is the end string
this is a string.
stringing won't match (you don't want a match here)

答案 3 :(得分:0)

您应该在问题中添加语言,以获取有关使用的更多信息。

以下是使用javascript的示例:

&#13;
&#13;
var reg = /^([\w\s\.]*)string([\w\s\.]*)$/;

console.log(reg.test('This is a sentence with string. More text.'));

console.log(reg.test('More text. This is a sentence with string'));

console.log(reg.test('string'))
&#13;
&#13;
&#13;

注意:

*:匹配零次或多次。

? :匹配零次或一次。

+:匹配一次或多次。

您可以更改*吗?或+如果你想要更多的定义。