正则表达式处理多种断句条件
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 小写字母)。
我正在尝试制作一个在异常中使用的正则表达式。
因此这些句子必须 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 小写字母)。