替换 .字符,并在每侧的字符串周围加上 \",如果 .没有被数字包围



我有一个字符串,如下所示:

"This is my abc.def ght.123 example 12.34 test"

我想更改为:

"This is my "abc def" "ght 123" example 12.34 test"

如何在java中使用正则表达式?谢谢伊萨

如果只有单点序列(如 abc.defght.123(,请尝试以下操作:

String input = "This is my abc.def ght.123 example 12.34 test";
input = input.replaceAll("\b([a-zA-Z]+)\.([a-zA-Z0-9]+)\b", "\"$1 $2\"");
System.out.println( input );
//output: This is my "abc def" "ght 123" example 12.34 test

使用的表达式是 means:任何字符序列,后跟一个点和一个字符或数字序列(b是单词边界,以防止匹配 (_abc.def ,如果你也想要它们,你可以向下划线添加到字符类或删除b(。

然后,替换会将匹配替换为"$1 $2"其中$1是第一组([a-zA-Z]+)的内容,$2是第二组([a-zA-Z0-9]+)的内容。

更新

对于所需的输入"This is my complexe string 12.34 ab.cd a+-.12 34.0+b zer.123.456 or 12.34.56 etc"(请参阅注释(,可以使用以下表达式:

(?i)(?<=^|s)([a-z+-]+).([a-z0-9+-]+)(?=s|$)

这里(?i)表示表达式应该不区分大小写,(?<=^|s)表示匹配,如果我们在字符串的开头或空格之后,(?=s|$)表示匹配,如果后面是空格或字符串的结尾。

核心表达还是([a-z+-]+).([a-z0-9+-]+)。如您所见,我只在字符类中添加了+-(请注意,可以写-而不是-但是减号字符的含义将取决于其在字符类中的位置(。如果要支持更多字符,请根据需要将它们添加到字符类中。有关预定义字符类(如 dp{L}(的详细信息,请参阅此处和此处。

相关内容

最新更新