【问题标题】:Patterns to identify type of data in a line of string用于识别字符串行中数据类型的模式
【发布时间】:2019-02-22 07:31:44
【问题描述】:

我正在尝试使用 Java 从字符串格式的文件中解析/提取数据。该文件不包含不相同的数据,数据在几行中用逗号分隔,在几行中用空格分隔。但在同一行内相同。此外,留置权中的参数是不相同的。

行示例:

ipaadress,timestamp,text,text,url,text,email
email text ipaddress text timestamp url
text - timestamp ipaddress text text url email
text,integer,integer,text,ipaddress,timestamp email

等等……

例如,我必须从所有行中识别电子邮件、IP 地址、电子邮件、网址,是否有这样做的模式?还是我应该只按分隔符拆分并单独解析/识别拆分是否是电子邮件/IP地址/网址等?

我已经关注 this 以使用 Grok 使其适用于相同的数据,JSON 是关键。是否有办法使用Grok 解决不一致问题?

帮助我理解。

【问题讨论】:

  • 如果字段的顺序不一样,最好一次用一个regex来提取信息,虽然也可以用一个regex,但是会有点复杂。
  • 同意,拆分然后检查。一个巨大的正则表达式更难维护且容易出错(可能有超级骗子正则表达式天才,正则表达式解决方案对他们来说更简单,但当你需要它时,它肯定对大多数人来说都是一样的)。
  • 这与“grok”框架有什么关系吗?如果没有,你已经错误地标记了这个!在将它们添加到问题之前,请阅读标签摘要。
  • @StephenC 我已经尝试过用 Java 中的 Grok 解析相同的数据。成功地从行中提取了一个 JSON。所以我很好奇是否可以将不相同的放在一起。
  • 'grok' 是一个 PHP 框架。你使用的是'java-grok'。

标签: java regex


【解决方案1】:

例如,我必须从所有行中识别电子邮件、IP 地址、电子邮件、网址,是否有这样做的模式?还是我应该只按分隔符拆分并单独解析/识别拆分是否是电子邮件/IP地址/网址等?

我肯定会说首先拆分然后识别不同的部分,这将需要很多的复杂性。假设您想创建一个模式来从这些字符串之一中提取电子邮件地址,除了电子邮件模式之外,您还必须小心匹配:

  1. 地址位于行首(以字母开头,可以在逗号或空格之前结束)
  2. 地址在中间(开始/结束/在逗号或空格之前)
  3. 地址在行尾(在逗号或空格之后开始可以以新行结束,具体取决于您输入输入的方式)

找到一个匹配所有这些情况(对于每种数据类型)的正则表达式将比仅拆分字符串并单独识别它们要多得多。

您还应该考虑如何处理包含空格和逗号本身的文本数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2015-04-03
    • 1970-01-01
    • 2010-12-27
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多