簡體   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