使用正则表达式从电子邮件中提取名称

时间:2018-03-26 14:42:16

标签: java regex

我正在尝试从他的电子邮件中获取用户名。我知道有很简单的方法可以实现这一点,但它让我想知道我是否可以使用正则表达式实现这一点。

我们假设用户输入以下电子邮件: user.sure_name123@mail.co

从该字符串中,我想提取:用户肯定名称

到目前为止我已经尝试过了:

IEnumerable<string>

但有了这个,域名就被包含了。使用([a-zA-Z]+) 我可以在'@'之前获得所有内容。

我不知道如何将两者结合起来实现我的目标。

任何提示?谢谢!

5 个答案:

答案 0 :(得分:1)

到目前为止提出的答案似乎已经错过了将两个想法合并为一个正则表达式的意图。当然,使用两个更简单。但是,可以通过使用匹配器组并仅收集我们感兴趣的组中的数据来完成。

Java 8版本:

public static void main(String[] args) {
    Pattern p = Pattern.compile("([a-zA-Z]+)[^a-zA-Z@]*(@.*)?");
    String input="user.sure_name123@mail.co";
    System.out.println(MatcherStream.results(p, input)
            .map(result -> result.group(1))
            .collect(Collectors.joining(" ")));
    // MatcherStream implementation http://stackoverflow.com/a/42462014/7098259
}

Java 9版本:

在Java 9中流式传输匹配结果更方便。

public static void main(String[] args) {
    System.out.println(Pattern.compile("([a-zA-Z]+)[^a-zA-Z@]*(@.*)?")
            .matcher("user.sure_name123@mail.co").results()
            .map(result -> result.group(1))
            .collect(Collectors.joining(" ")));
}

替换所有版本:

最后,这个不是一个纯粹的正则表达式解决方案,因为它要求你在最后修剪一个额外的空格字符。但是你可以看到使用replaceAll更加简洁:

public static void main(String[] args) {
    String input = "user.sure_name123@mail.co";
    System.out.println(input.replaceAll("((@.*)|[^a-zA-Z])+", " ").trim());
}

<强>输出:

  

用户肯定名称

答案 1 :(得分:0)

使用以下内容:

email.replaceAll("@.*","").replaceAll("[^a-zA-Z]+", " ").trim();

这将有效删除@符号后的任何内容,然后在剩余部分中将用单个空格替换所有非字母字符序列。最后,如果您在电子邮件地址&#39;用户部分的末尾或开头有trim,则会调用123方法来删除初始和最终空格。

答案 2 :(得分:0)

在Java中,您可以使用Matcher类使用正则表达式提取电子邮件的用户名部分。为了替换非字母和非数字符号,我建议您在解压缩文本后使用String类中的## OTHER LIBS LIBS += -L/myopencvpath/share/OpenCV/3rdparty/lib LIBS += -lIlmImf -lippicv -llibjasper -llibjpeg -llibpng -llibtiff -ltbb -lzlib 方法:

IF ( USE_TBB )
    MESSAGE( STATUS "Including TBB on MyLib build" )
    FIND_PACKAGE( tbb REQUIRED )
    LINK_DIRECTORIES( ${LIBRARYPATH} )
ENDIF ()

答案 3 :(得分:0)

这是我使用regexp模式组的简单解决方案:

private static final Pattern EMAIL = Pattern.compile("(?<one>[^\\.]+)\\.(?<two>[^_]+)_(?<three>[^@\\d]+).+");

public static String getName(String email) {
    Matcher matcher = EMAIL.matcher(email);
    return matcher.matches() ? matcher.group("one") + ' ' + matcher.group("two") + ' ' + matcher.group("three") : null;
}

这是指向Demo at regex101.com

的链接

答案 4 :(得分:0)

String email = "user.sure_name123@mail.co";
String result = email.replaceAll("@.+$", ""); //user.sure_name123
result = result.replaceAll("\\W+"," "); //user sure name123