我有一个 String str = "U.S. ";
使用正则表达式,如何制作 str = "U.S."
?
str 只是一个大字符串的一部分,字符串的其余部分由句子组成,因此我想要一个仅适用于“单字符”句子和多种情况的正则表达式(即 “A.K.A.”
和 “B.C.”
)。到目前为止,我已经尝试使用replaceAll(),但我不知道如何引用构成刚刚捕获的匹配的字符,以便我可以在替换字符串中使用它们。
*我的意思是“单字符”句子,在示例中“U.S.
”,“S.”
感谢您的帮助!
最佳答案
如果您创建一个正则表达式一次匹配一个缩写字符,那么您可以使用 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]\.)
一个空格,后跟一个检查是否后面还有另一个缩写字符。有必要检查您匹配的字符后面的另一个字符,因为您不想替换缩写中最后一个字符后面的空格。例如“约翰住在美国,他是一名学生”
应该变成“约翰住在美国,他是一名学生”
,而不是“约翰住在美国,他是一名学生”
。
如果您使用匹配可变长度缩写的正则表达式,则不可能使用简单的 replaceAll
来完成此操作,例如([A-Z]\. )+(?=[A-Z]\.)
因为您无法在替换字符串中引用捕获组的各个重复。
关于java - 使用正则表达式将缩写重新组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30879318/