在破译句子分词器正则表达式时遇到问题

Having trouble deciphering a sentence tokenizer regex

以下正则表达式假设用作句子分词器模式,但我在破译它到底在做什么时遇到了一些麻烦:

(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<![A-Z]\.)(?<=\.|\?|\!)\s

我知道它使用了正面和负面的回顾,正如 this post 的公认答案所解释的那样(他们给出了这样的负面回顾的例子:(?<!B)A)。但是在上面的正则表达式中 A 被认为是什么?

正则表达式正在检查句子之间的中断。负向回溯防止代表缩写而不是句子结尾的错误匹配。他们的意思是:

  • (?<!\w\.\w.) 不要匹配任何看起来像 A.b.、2.c. 或 1.3 的内容。 (可能他们的意思是第二个句点也是 \. 以仅匹配一个句点,但正如所写的那样,它将匹配末尾的任何字符,例如 A.b! 或 g.Z4)
  • (?<![A-Z][a-z]\.) 不要匹配任何看起来像 Cf.、Dr.、Mr. 等的内容。请注意,这只会检查两个字符,因此“Mrs.”会被错误匹配。
  • (?<![A-Z]\.) 不匹配任何看起来像 A. 或 C.
  • 的东西

然后如果这些都通过了,它有一个正向后视 (?<=\.|\?|\!) 来检查 .?!

最后它匹配任何空格 \s

Demo