我有String str = "U. S. ";
使用正则表达式,我该如何制作str = "U.S."
?
str只是一个大字符串的一部分,字符串的其余部分由句子组成,所以我想要一个仅适用于"一个字符"的正则表达式。句子和多个案例(即"A. K. A. "
和"B. C. "
)。到目前为止,我已尝试使用replaceAll(),但我不知道如何引用构成刚刚捕获的匹配的字符,以便我可以在替换字符串中使用它们。
*通过"一个字符"句子我的意思是,在示例中"U. S.
","S."
感谢您的帮助!
答案 0 :(得分:0)
如果您使正则表达式一次匹配一个缩写字符,则可以使用replaceAll()
和$1
替换它:
String s1 = "Back in the U. S. S. R.";
String s2 = s1.replaceAll("([A-Z]\\.) (?=[A-Z]\\.)", "$1");
System.out.println(s2);
输出:
Back in the U.S.S.R.
正则表达式:
([A-Z]\.)
匹配单个大写字母后跟一个点,作为捕获组1,可以使用$1
引用。
(?=[A-Z]\.)
一个空格,然后检查后面是否有另一个缩写字符。在匹配的字符之后检查另一个字符是必要的,因为您不想替换缩写中最后一个字符后面的空格。对于例如"John lives in the U. S. A. He is a student"
应该变为"John lives in the U.S.A. He is a student"
,而不是"John lives in the U.S.A.He is a student"
。
如果您使用匹配可变长度缩写的正则表达式,则无法使用简单的replaceAll
进行此操作,例如([A-Z]\. )+(?=[A-Z]\.)
因为您无法在替换字符串中引用捕获组的单个重复。