2017-05-19 102 views
0

所以我正在学习正则表达式,并在这里尝试练习: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'的第二个字母。乱七八糟的'我'应该匹配,不是吗?

+0

FYI这个工程:' (['',()\ w \ n] | \。\。\。)+($ | [。?!])' – Bohemian

+0

我会用'[az] [...。?!] [»''' })\]] \ S + [AZ]'。问题在于你对'[^ n]'的理解是错误的:它匹配'l','5','§','%'等。** **除了'n' **之外的任何字符**。 –

+0

@WiktorStribiżew,这是我的意图[^ n]。假设我对这个问题的理解是正确的(它不是......我应该匹配整个句子,而不仅仅是行),[^ n]是为了排除右侧的第一行(第二个字符是' n'),而不会影响左侧的任何行。 –

回答

1

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

无论哪种方式,其工作原理:

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

要回答你的问题;当您取出n,[^n]..[^W]使其成为[^]..[^W]时,这会导致第一个]成为character class选择的一部分,即您所说的;不以下任何caracters ]..[^W

的要再次说明,在除去n使第二]是结束character class定界符,不是第一^后立即之一。

这就是为什么上以下行第二期后停止:

assumes word senses. Within in the U.S. A.,人们往往

always thought so.) Then but W. G.格雷斯从来没有太多

+0

非常感谢。非常有启发性! –

0

什么运动要你来解决,如引用:

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

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

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

  1. 一句话要结束与一些“终止”标点符号,像.) ! ? ' "
  2. 句子与上句末开始,由跟随空格,并跟进大写字母

  3. 还有一个例外,缩写可以写成一个大写字母,然后是整站,按空格。

我的解决方案(显然不是最好的),可以解决的行使(扰流改变):

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

+0

啊,我当然误解了这个问题。根据前面的三个教训,我应该匹配线条,所以我开始了这个假设。这就是说,我的企图不符合该特定行的任何原因? –

相关问题