正则表达式处理多种断句条件

RegEx expression to handle multiple conditions of breaking sentences

我正在尝试制作一个在异常中使用的正则表达式。

因此这些句子必须 return 为假(前导数字包含在字符串中):

3.{17} this is italics and should break.{18} 

4. this is another sentence and should break. 

5. This is another sentence and should break. 

它必须 return 对于这些:

There are 2 reasons for this 1. you are here and 2. you are communicating. 

Is it 2? they wanted to know. 

1 digit at the beginning but with 1. with a period should return true.

换句话说,如果字符串的开头是一个数字后跟一个句点,它应该 return false(即使 "\{\d+\}" 可以选择跟随它)和 [= 后面的字符49=]没关系。如果数字和句点(或 !?)嵌入在句子中后跟小写字符,则它必须 return 为真,在其他情况下它必须为假。

进一步说明:这会进入 java 属性文件,然后将值传递给 perl5 正则表达式引擎以 return 损坏的文本。

我试着用一种表达方式来表达它,但不知怎的我无法表达正确。 这是到目前为止提出的:

^([^0-9\.]+[\.]|
[^\.!\?]*[\?!]+[\?!\.]+|
[0-9]+[^\?!\.]+[\?!\.]+|
[^0-9]*[0-9]+[^\?!\.]+[\?!\.]+)
(\{\d+\}[\u0020\u00A0]|
[\u0020\u00A0]*)[a-z]

我好像走到了死胡同,看不出我哪里错了。

感谢任何建议。

更新: 具有前瞻性的更简单格式:^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll} 基于评论。

您可以使用

^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll}

参见regex demo

模式匹配:

  • ^ - 字符串锚点的开始
  • (?!\d+\.) - negative lookahead 如果其模式在字符串的开头匹配,则匹配失败:1+ 数字后跟一个点
  • [^.!?]* - .!?
  • 以外的 0+ 个字符
  • [.!?]+ - 1 个或多个 .!? 符号
  • (\{\d+\}\s|\s*) - { + 1 个或多个数字 + } 或 0+ 个空格(如果您对使用此 捕获的值不感兴趣捕获组,你可以通过在第一个(之后添加?:将其变成非捕获组。
  • \p{Ll} - 小写字母(如果使用 u 修饰符,它也会匹配所有 Unicode 小写字母)。