我正在尝试制作一个在异常中使用的正则表达式。
因此它必须为这些句子返回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}
基于评论。
答案 0 :(得分:1)
您可以使用
^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll}
请参阅regex demo。
模式匹配:
^
- 字符串锚的开始(?!\d+\.)
- negative lookahead如果匹配的字符串在字符串的开头匹配,则匹配将失败:1+位后跟点[^.!?]*
- 除.
,!
和?
[.!?]+
- 一个或多个.
,!
或?
符号(\{\d+\}\s|\s*)
- {
+ 1位或更多位+ }
或0+空白(如果您对使用此捕获组,您可以通过在第一个?:
之后添加(
将其变为非捕获。\p{Ll}
- 小写字母(如果使用u
修饰符,它也会匹配所有Unicode小写字母)。