我无法弄清楚为什么这个正则表达式不起作用

时间:2017-05-19 05:02:30

标签: regex

所以我目前正在学习正则表达式,并在这里尝试练习:https://regex.sketchengine.co.uk/cgi/ex4.cgi

特别是,我能够匹配左边的每一行(没有匹配右边的任何行),除了以下行:

mess! He did not let it

我知道这一定是一个可怕的答案,但这就是我所拥有的:

^[mbadhi][^n]..[^W]([a-zA-Z'") ]+[.!?][a-zA-Z'") ]+)

我不明白(除了它为什么不起作用),就是当我删除' n'在[^ n]里面,它匹配句子(但也是右边的一部分)。我必须遗漏一些非常基本的东西,因为我的理解是^ [mbadhi]应该匹配以这些字母之一开头的任何一行的第一个字符,然后是任何不是字母的第二个字母&n; #39 ;. '我'从混乱中应该匹配,不是吗?

2 个答案:

答案 0 :(得分:1)

你试图解决的问题有点蹩脚,因为没有办法确定一个列与另一个列格式化的方式。所以,答案完全是数据特定的。我认为你不会在实践中看到这一点。

无论哪种方式,这都有效:

(^[amhd].*$|^it.*$|^but w.*$)

回答你的问题;如果您在n [^n]..[^W]中取出[^]..[^W],则会导致第一个]成为character class选择的一部分,即您说的是;不是以下任何字符]..[^W

要再次声明,删除n会导致第二个]成为结束character class分隔符,而不是紧接在第一个^之后的分隔符。

这就是为什么它在以下几行的第二个句号之后停止:

assumes word senses. Within in the U.S. A。,人们经常

always thought so.) Then but W. G.格蕾丝从来没有多少

答案 1 :(得分:0)

演习要求你解决的内容,如引用:

  

......一个句子结束,另一个句子开始......

但是你的回答似乎没有做任何接近它的事。

如果你想自己解决一些提示:

  1. 句子需要以一些“终止”标点符号结尾,例如. ) ! ? ' "
  2. 一句话以前一句结尾开头,后跟空格,跟进大写字母

  3. 有一个例外,即缩写可以写成一个大写字母,然后是句号,后跟空格。

  4. 我能解决这个问题的解决方案(显然不是最好的)是(扰乱者改变):

      

    ^.*(?<![A-Z])[.\?"')!] +[A-Z].*$