需要帮助。不知何故无法使它正常工作。需要替换电子邮件地址值。参见assert
。
String line = "John,Smith,123 Main St,Lake City,AB,37221,john.smith@gmail.com,";
Pattern ptn = Pattern.compile("(^[A-Za-z0-9.'_%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$)",Pattern.CASE_INSENSITIVE);
Matcher mtch = ptn.matcher(line);
String newLine = mtch.replaceFirst("abc@gmail.com");
assertEquals("John,Smith,123 Main St,Lake City,AB,37221,abc@gmail.com,", newLine);
答案 0 :(得分:0)
您需要使用两次转义符并删除锚点来对其进行修复:
s.replaceFirst("[A-Za-z0-9.'_%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", "abc@gmail.com")
^ ^^ ^
请参见regex demo
^
匹配字符串的开头,$
匹配字符串的结尾。他们阻止了您的正则表达式匹配。此外,要在Java字符串文字中定义反斜杠,必须使用2个反斜杠。
由于在Java正则表达式中,\w
之类的速记类默认情况下不支持Unicode,因此您可以缩短模式:
s.replaceFirst("[\\w.'%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", "abc@gmail.com")
如果要使用当前的应用逻辑:
String line = "John,Smith,123 Main St,Lake City,AB,37221,john.smith@gmail.com,";
Pattern ptn = Pattern.compile("[\\w.'%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}");
Matcher mtch = ptn.matcher(line);
String newLine = mtch.replaceFirst("abc@gmail.com");
assertEquals("John,Smith,123 Main St,Lake City,AB,37221,abc@gmail.com,", newLine);
答案 1 :(得分:0)
您希望匹配的电子邮件位于字符串的中间,但是正则表达式希望从头到尾匹配整个字符串。这是因为有'^'和'$'锚点。
以下是正则表达式的示例,但没有锚点: https://regex101.com/r/Roe6v6/1
编辑:请注意,regex101不支持所有正则表达式。用您的特定语言(Java?)实现模式时,请确保遵循正确的语法,如@WiktorStribiżew所说。