【问题标题】:String Tokenizer/Regex to find email address/IP Address in a fileString Tokenizer/Regex 在文件中查找电子邮件地址/IP 地址
【发布时间】:2018-03-15 06:48:04
【问题描述】:

我有一份文档,其中包含电子邮件地址和 IP 地址。我需要根据电子邮件地址和 IP 地址拆分文档,以将文件中的每个 IP/电子邮件地址或单词存储在一个数组中。

有没有办法使用 regex/String Tokenizer 来查找电子邮件/IP 地址来执行此操作?我知道如何使用 regex/String Tokenizer 逐行分隔句子中的单词。只是不确定如何查找电子邮件/IP 地址。 因为文件可能包含不应该包含在数组中的@ \ // 等非法字符。

例如我的文档包含:

您可以联系test@test.com,地址是192.168.1.1。

我的数组应该包含:

可以

联系

test@test.com

地址

192.168.1.1

【问题讨论】:

  • 您是否要对字符串进行标记,然后针对每个标记运行正则表达式以查找后续匹配项?我认为这接近您所需要的:regexr.com/3gspa,创建一个将匹配所有基于 RFC 的正则表达式,但我认为这应该有效
  • 是的,我想对字符串进行标记。我遇到了一个问题,因为我无法使用 String Tokenizer 来检索令牌,因为 IP 地址和电子邮件地址会因为它们包含的符号而被拆分为单独的令牌。感谢您的帮助!

标签: java regex tokenize stringtokenizer


【解决方案1】:

电子邮件地址的正则表达式是:

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

IP 地址的正则表达式是:

((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

在我看来,您可以使用java.util.regex.Matcher 和调用方法matcher.group(0) 之类的:

 Pattern p = Pattern.compile("<your regex here>");
 Matcher m = p.matcher(str);
 List<String> strs = new ArrayList<>();
 while (m.find())
     strs.add(m.group(0));

这些可能工作正常,但我还没有测试。

【讨论】:

    【解决方案2】:

    这是一个regexr,其中包含一些示例和一个适合您的正则表达式。

    正则表达式是(电子邮件部分是从here 复制的,我也不肯定它复制并粘贴正确。):

    (([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
    

    【讨论】:

    • 这有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2011-03-21
    • 2015-01-23
    相关资源
    最近更新 更多