RegEx表达式处理多个破坏句子的条件

时间:2017-06-24 21:58:18

标签: regex regex-negation

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

因此它必须为这些句子返回false(字符串中包含前导数字):

  

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. 

它必须为这些返回true:

  

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.

换句话说,如果字符串的开头是一个数字后跟一个句点,它应该返回false(即使"\{\d+\}"可选地跟随它)并且空格后面的字符无关紧要。如果数字和句点(或!?)嵌入句子后跟小写字符,则必须返回true,在其他情况下,它必须为false。

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

我尝试用一​​个表达式表达它,但不知怎的,我无法正确表达它。 这是迄今为止提出的:

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

我似乎陷入了僵局,无法看出我的错误。

感谢您的任何建议。

更新 一种简单的预见格式:^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll}基于评论。

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参阅regex demo

模式匹配:

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