【问题标题】:Regular expression to extract comma separated values?正则表达式提取逗号分隔值?
【发布时间】:2018-04-09 07:58:38
【问题描述】:

我正在尝试从 csv 文件中读取值,然后使用 ExtractText 处理器将值存储到属性中。该文件仅包含一行,其中有 5 个以逗号分隔的值。这是我的文件的内容:

jdbc:mysql://localhost:3306/test, com.mysql.jdbc.Driver, C:\ProgramFiles\MySQL\mysql-connector.jar, root, root 

我在 ExtractText 处理器中手动添加了 5 个属性:-

DatabaseConnectionURL
DatabaseDriverClass
DatabaseDriverLocation
DatabaseUser
Password

现在,我想要我在 ExtractText 处理器中定义的上述 5 个属性的正则表达式,以便它们获得以下值:-

DatabaseConnectionURL = jdbc:mysql://localhost:3306/test
DatabaseDriverClass = com.mysql.jdbc.Driver
DatabaseDriverLocation = C:\Program Files\MySQL\mysql-connector.jar
DatabaseUser = root
Password = root

你能提供以上5个属性的正则表达式吗?

【问题讨论】:

  • 正则表达式是^([^,]*)(?:\s*,\s*([^,]*)){4}(演示:regex101.com/r/AHK23W/1),或者更详细的 ^([^,]*)(?:\s*,\s*([^,]* ))(?:\s*,\s*([^,]*))(?:\s*,\s*([^,]*))(?:\s*,\s*([ ^,]*)) (demo: regex101.com/r/AHK23W/2) 我不知道如何使它与 apache nif -s ExtractText 一起工作。
  • @TamasRevthanx。您给定的正则表达式有效,但您能告诉我正则表达式仅从 csv 文件中获取第三个值吗?
  • @TamasRev 下面是文件的内容:- jdbc:mysql://localhost:3306/test, com.mysql.jdbc.Driver, C:\ProgramFiles\MySQL\mysql-connector。 jar, root, root 所以,基本上我想要一个只获取第三个值的正则表达式,即 C:\ProgramFiles\MySQL\mysql-connector.jar
  • 幸运的是,它不是一个成熟的 csv 文件。那解析起来会更复杂。 RFC 4180 解释了这一切:ietf.org/rfc/rfc4180.txt 所以,只选择第三个值:您可以删除不必要的括号,以及第三个元素之后的其余模式。所以使用这个正则表达式:^[^,]*(?:\s*,\s*[^,]*)(?:\s*,\s*([^,]*))\s*,\s* 第三个元素将在第 1 组中。这里演示:regex101.com/r/AHK23W/3
  • 非常感谢@TamasRev

标签: regex minify apache-nifi hortonworks-data-platform hortonworks-dataflow


【解决方案1】:

里沙布,

ExtractText 处理器使用以下正则表达式来捕获行。

ExtractedData:(^.*$)

然后使用 updateAttribute 和 getDelimitedField() 表达式如下所示为流文件属性赋值。

DatabaseConnectionURL:${ExtractedData:getDelimitedField(1)}

DatabaseDriverClass:${ExtractedData:getDelimitedField(2)}

DatabaseDriverLocation:${ExtractedData:getDelimitedField(3)}

DatabaseUser:${ExtractedData:getDelimitedField(4)}

Password:${ExtractedData:getDelimitedField(5)}

getDelimitedField() "将主题解析为分隔的文本行,并从该分隔文本中返回一个字段。"并且可以用于任何支持 NiFi 表达式语言的配置属性。有关getDelimitedField() 的详细说明,请查看 NiFi 表达式语言指南。

https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#getdelimitedfield

希望此解决方案有助于解决您的问题。

如果它有效,请不要忘记接受,如果遇到任何问题,请告诉我。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多