Java 正则表达式 [a-z] 也匹配数字和大写字母

标签 java regex

我有大量文字。目标是用空格分隔点,这些点仅出现在句子的末尾,而不出现在缩写、时间、日期或其他内容中。这样做:

    String regex = "[a-z](\\.)\\s";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);
    if(matcher.find())
        text = text.replace(matcher.group(1), " " + matcher.group(1));

结果不仅是“句子结尾。下一个句子。”,还有这样的内容:“某些数字信息 16 . 15 不应与此正则表达式匹配。”。

最佳答案

我建议使用 Matcher#replaceAll() 为此:

Pattern regex = Pattern.compile("([a-z])\\.(\\s|$)");
text = regex.matcher(text).replaceAll("$1 .$2");    // $1 is for letter, $2 is for space/end of line

使用lookbehind(?<=)实现同样的效果:

Pattern regex = Pattern.compile("(?<=[a-z])\\.(\\s|$)");
text = regex.matcher(text).replaceAll(" .$1");          // $1 now is for space/end of line

关于Java 正则表达式 [a-z] 也匹配数字和大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631887/

相关文章:

java - MySQLNonTransientConnectionException : Client does not support authentication protocol requested by server; consider upgrading MySQL client

java - 如何使用arcobject(Arcgis 10)构建java桌面应用程序?

java - 在数组java中搜索一个数字

python - 如何根据文本中的关键字将一个html页面拆分为多个html

javascript - 如何使用黑名单数组和正则表达式禁止带有变音符号的单词?

java - Java 中的冒号有什么作用?

java - Firebase 实时数据库值检索

python - 在 Python 中,在一个字符串中,用一个空格删除多个空格,如果它不是前导多个空格

javascript - 验证字数小于 100 的正则表达式

java - 在 Java 中使用模式匹配