Java 如何在句子末尾的句号后插入空格,而不是缩写或浮点数?
我有一个JTextArea,我想在它旁边没有空格的地方替换所有句号,例如“这是一个句子。这是另一个C.O.D.句子。这是另一个C.a.T.句子。”到“这是一个句子。这是另一个C.O.D.句子。这是另一个C.a.T.句子。”。但我不希望缩写或浮点数获得额外的空格,例如“这是一个C.a.t.浮点5.5”不应该变成“这是一个C.a.t.浮点5.5”!我正在使用string.replaceAll(“.”,“”)来处理这个问题,但事实证明这是不够的。您可以使用正则表达式Java 如何在句子末尾的句号后插入空格,而不是缩写或浮点数?,java,regex,Java,Regex,我有一个JTextArea,我想在它旁边没有空格的地方替换所有句号,例如“这是一个句子。这是另一个C.O.D.句子。这是另一个C.a.T.句子。”到“这是一个句子。这是另一个C.O.D.句子。这是另一个C.a.T.句子。”。但我不希望缩写或浮点数获得额外的空格,例如“这是一个C.a.t.浮点5.5”不应该变成“这是一个C.a.t.浮点5.5”!我正在使用string.replaceAll(“.”,“”)来处理这个问题,但事实证明这是不够的。您可以使用正则表达式 ([^A-Z])\.(?!\d)
([^A-Z])\.(?!\d)
替换所有的“.”,后面不跟数字,前面不跟大写字母
请参阅,(您应该编辑您的问题,以明确说明您的要求,例如缩写词的处理)
您可以将(?替换为
演示:
说明:
(?<! ) 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
。如果您理解上述正则表达式,那么更改正则表达式来修复这些缺陷应该不难。保持简单,没有负面外观落后等:
s = s.replaceAll("([^A-Z0-9.])\\.([^0-9 \t])", "$1. $2");
在以下情况下替换该期间:
- 在资本本身之后(U.N.C.或M.Twain)
- 数字后(1.-希望句子不以数字结尾)
- 经过一段时间(…)
- 数字前(.5-希望下一句话不是以数字开头)
- 在空格或制表符之前
使用一些正则表达式。是否也要将“M.Twain”替换为“M.Twain”?请参阅此解决方案@Willmore No我不想将“M.Twain”替换为“M.Twain”。@marvel308的解决方案将“M.Twain”更改为“M.Twain”,这对于缩写是不可取的。在编辑的答案中,正则表达式是删除点之前的字母!不会的,您必须用“M.Twain”替换(第一组)。“根据OP的(不明确的)要求,您好,查看在线编译器结果。任何都不被视为缩写,应该被替换…(老实说,我认为您的解决方案非常合理。OP的问题更多的是没有给出明确的要求)