构造正则表达式以匹配句子

use*_*923 9 java regex

我正在尝试编写一个正则表达式模式,该模式将匹配以多个或一个制表符和/或空格开头的任何句子.例如,我希望我的正则表达式模式能够匹配"你好我喜欢正则表达式!" 但所以我在"你好"之后如何匹配单词.到目前为止我有这个:

    String REGEX = "(?s)(\\p{Blank}+)([a-z][ ])*";
    Pattern PATTERN = Pattern.compile(REGEX);
    Matcher m = PATTERN.matcher("         asdsada  adf adfah.");
    if (m.matches()) {
        System.out.println("hurray!");
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢.

Ste*_* P. 23

String regex = "^\\s+[A-Za-z,;'\"\\s]+[.?!]$"
Run Code Online (Sandbox Code Playgroud)

^指"开头"
\\s是指白色空间
+是指1个或多个
[A-Za-z,;'"\\s]是指任何字母,,,;,',",或空白字符
$是指"结尾"

  • 注意:此正则表达式不会缩放.如果您有医学博士或史密斯夫人的情感.不起作用. (5认同)

Tay*_* Hx 17

一个示例正则表达式,用于通过定义匹配句子:"一个句子是一系列字符,从至少一个空白字符开始,以一个结尾.,!?"如下:

\s+[^.!?]*[.!?]
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

请注意,换行符也将包含在此匹配中.


l33*_*33t 5

句子以单词边界(因此)开始,以一个或多个\b终止符结束。因此:

\b[^.!?]+[.!?]+
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/7DdyM1/1

这给出了相当准确的结果。但是,它不会处理小数。例如,这句话将被解释为两个句子:

The value of PI is 3.141...
Run Code Online (Sandbox Code Playgroud)