我有一个字符串,如下所示:
"This is my abc.def ght.123 example 12.34 test"
我想更改为:
"This is my "abc def" "ght 123" example 12.34 test"
如何在java中使用正则表达式?谢谢伊萨
如果只有单点序列(如 abc.def
或 ght.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+-]+)
。如您所见,我只在字符类中添加了+
和-
(请注意,可以写-
而不是-
但是减号字符的含义将取决于其在字符类中的位置(。如果要支持更多字符,请根据需要将它们添加到字符类中。有关预定义字符类(如 d
或 p{L}
(的详细信息,请参阅此处和此处。