繁体   English   中英

在Scala中使用正则表达式进行模式匹配

[英]Pattern matching using regex in Scala

我有一个看起来像这样的数据集:

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中使用模式匹配和正则表达式来匹配三个字段,因为在第二行中,“公共”字段在数据集中向左移动。

观看演示

(?:(?:\\d{1,3}\\.){3}\\d{1,3}\\s*){2}([az]+)

这是一个处理它的讨厌的正则表达式: (\\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地址,并以publicprivate作为ADT),请告诉我,我可以修改代码以解决该问题。好-kantan.regex的重点是通过正则表达式从字符串中提取类型正确的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM