我有一个像这样的字符串:
"This is my abc.def ght.123 example 12.34 test"
我想改为:
"This is my \"abc def\" \"ght 123\" example 12.34 test"
如何在java中使用正则表达式?谢谢伊萨
我有一个像这样的字符串:
"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
使用的表达式是指:任何字符序列后跟一个点和一个字符或数字序列(这\b
是防止匹配的单词边界 ( _abc.def
,如果你也想要它们,你可以将下划线添加到字符类或删除\b
)。
然后替换将用\"$1 $2\"
where $1
is the content of the first group([a-zA-Z]+)
和$2
is 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\-
但减号的含义将取决于它在字符类中的位置)。如果要支持更多字符,请根据需要将它们添加到字符类中。有关预定义字符类的更多信息,\d
请p{L}
参见此处和此处。