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

时间:2013-12-02 04:14:43

标签: 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!");
    }

任何帮助将不胜感激。感谢。

6 个答案:

答案 0 :(得分:18)

String regex = "^\\s+[A-Za-z,;'\"\\s]+[.?!]$"

^表示“以”开头“ \\s表示空格 +表示1个或更多 [A-Za-z,;'"\\s]表示任何字母,;'"或空白字符
$表示“以”结尾“

答案 1 :(得分:14)

根据定义匹配句子的示例正则表达式:“句子是一系列字符,从至少一个空格字符开始,以.!或{{1}之一结尾“如下:

?

Regular expression visualization

请注意,换行符也会包含在此匹配中。

答案 2 :(得分:2)

如果您希望匹配以空格开头的所有字符串,可以尝试使用“^ \ s + *” 正则表达式。

此工具可以帮助您有效地测试正则表达式。

http://www.rubular.com/

答案 3 :(得分:1)

根据您的要求和要求,以下内容将有效。

String s  = "    hello there I like regex!";
Pattern p = Pattern.compile("^\\s+[a-zA-Z\\s]+[.?!]$");
Matcher m = p.matcher(s); 
if (m.matches()) {
    System.out.println("hurray!");
}

请参阅working demo

答案 4 :(得分:1)

String regex = "(?<=^|(\.|!|\?) |\n|\t|\r|\r\n) *\(?[A-Z][^.!?]*((\.|!|\?)(?! |\n|\r|\r\n)[^.!?]*)*(\.|!|\?)(?= |\n|\r|\r\n)"

与定义“以大写字母开头并以点结尾的句子”之后的所有句子匹配。

答案 5 :(得分:1)

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

\b[^.!?]+[.!?]+

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

这给出了非常准确的结果。但是,它处理小数。例如。这句话会被解释成两句话:

The value of PI is 3.141...