如何在句子结尾处完全停止后插入空格,而不是缩写或浮点数?

时间:2017-08-30 04:47:31

标签: java regex

我有一个JTextArea,我想在其中替换所有句号而没有旁边的空格,例如"这是一个句子。这是另一个C.O.D句子。这是另一个C.A.T. 。句子"到"这是一个句子。这是另一个C.O.D句子。这是另一个C.A.T.句。&#34 ;.但是我不想要缩写或浮点数来获得额外的空格,例如#34;这是C.A.T.漂浮5.5"不应成为"这是C. A. T. float 5. 5"!我正在使用string.replaceAll("。","。"),这不足以证明这一点。

3 个答案:

答案 0 :(得分:1)

保持简单,没有负面的后视等等:

s = s.replaceAll("([^A-Z0-9.])\\.([^0-9 \t])", "$1. $2");

更换时间段:

  • 在资本本身之后(U.N.C。或M.Twain)
  • 之后的数字(1. - 希望句子不以数字结尾)
  • 一段时间后(...)
  • 在一个数字之前(.5--希望下一个句子不以数字开头)
  • 在空格或制表符之前

答案 1 :(得分:0)

你可以使用正则表达式

([^A-Z])\.(?!\d)

取代所有"。"没有跟一个数字,后面没有大写字母

请参阅online compiler,{{3}}

答案 2 :(得分:0)

(您应该编辑您的问题以明确说明您的要求,例如缩写的处理)

您可以将(?<!\b[A-Z])\.(?!\d)替换为.<space>

示范:https://regex101.com/r/g1g7Yg/1

说明:

(?<!       )          negative look-behind group
    \b[A-Z]           word boundary following by one uppercase character
                      (i.e. one upper case character)
            \.        a dot
              (?!\d)  negative look-ahead group, of single digit

这基本上意味着,如果一个点前面没有单个大写字符,并且后面没有数字

,则替换一个点。

仍然存在一些不会取代Hello world.1 apple 1 day的缺陷。如果您了解上述正则表达式,那么更改正则表达式以解决此问题并不困难。