0

我有一个像这样的字符串:

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

我想改为:

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

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

4

1 回答 1

0

如果只有一个点序列,例如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

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

然后替换将用\"$1 $2\"where $1is the content of the first group([a-zA-Z]+)$2is the content of the second group替换匹配项([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\+\-]+)。如您所见,我只在字符类中添加了+and -(请注意,可以写成-not\-但减号的含义将取决于它在字符类中的位置)。如果要支持更多字符,请根据需要将它们添加到字符类中。有关预定义字符类的更多信息,\dp{L}参见此处此处

于 2012-05-04T08:26:24.467 回答