java - 使用正则表达式将缩写重新组合在一起

标签 java regex string

我有一个 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/

相关文章:

PHP 正则表达式 : Get domain from URL

python - 正则表达式 python : match multi-line float values between brackets

java - 查找列表中重复出现次数最多的 3 个对象 - Java

java - Guava 比较链有列表吗?

javascript正则表达式解析没有协议(protocol)的url

python - 计算字符串中的多个字母组

字符串匹配alg的c++实现

java - 如何修剪字符串中的特定字符

java - junit 中是否有 @AfterMethod 的替代方案?

java - 比较单元格中的 2 个值并更改 JTable 中的单元格颜色