我有一个如下所示的数据集: -
192.10.678.234 192.12.898.123 public
192.10.567.6 3.3.3.3 public
192.20.123.39 123.34.31.678 private
我被困在如何使用模式匹配和正则表达式匹配三个字段 scala在第二行中,“public”字段在数据集中向左移动。
答案 0 :(得分:0)
(?:(?:\d{1,3}\.){3}\d{1,3}\s*){2}([a-z]+)
答案 1 :(得分:0)
这是一个相当令人讨厌的正则表达式:(\d{1,3}(?:\.\d{1,3}){3})\s+(\d{1,3}(?:\.\d{1,3}){3})\s+(private|public)
使用kantan.regex,您可以表达以下内容:
import kantan.regex.implicits._
// Where `input` is your string.
input.unsafeEvalRegex[(String, String, String)](rx"(\d{1,3}(?:\.\d{1,3}){3})\s+(\d{1,3}(?:\.\d{1,3}){3})\s+(private|public)")
这会产生一个Iterator[(String, String, String)]
,当通过foreach(println _)
时,会产生:
(192.10.678.234,192.12.898.123,public)
(192.10.567.6,3.3.3.3,public)
(192.20.123.39,123.34.31.678,private)
如果您对更好的类型感兴趣(例如,每个条目都有一个Entry
类,以专用类型表示每个IP地址,并将public
和private
作为ADT) ,让我知道,我也可以修改代码来处理它 - kantan.regex的重点是通过正则表达式从字符串中提取出良好类型的数据。