簡體   English   中英

具有OR運算符的Scala Regex Extractor

[英]Scala Regex Extractor with OR operator

我有這段冗長的代碼,確實使Scala中的正則表達式提取/匹配短路。 這會嘗試將字符串與第一個Regex匹配,如果不匹配,則會嘗試將字符串與第二個Regex匹配。

val regex1 : scala.util.matching.Regex = "^a(b)".r
val regex2 : scala.util.matching.Regex = "^c(d)".r

val s = ? 
val extractedGroup1 : Option[String] = s match { case regex1(v) => Some(v) case _ => None }
val extractedGroup2 : Option[String] = s match { case regex2(v) => Some(v) case _ => None}

val extractedValue = extractedGroup1.orElse(extractedGroup2)

結果如下:

s ==“ ab”,然后提取值==“ b”

s ==“ cd”然后extractValue ==“ c”

s ==“ gg”,然后extractValue ==無。

我的問題是我們如何才能將兩個正則表達式與正則表達式或運算符組合為一個正則表達式,而仍然使用Scala提取器。 我試過了,但總是無情況。

val regex : scala.util.matching.Regex = "^a(b)$ | ^c(d)$".r
val extractedValue: s match { case regex(v) => Some(v) case _ => None }

不要在正則表達式中使用生活質量空間,盡管它們感覺很像斯卡拉式風格,但它們可能是文學上的東西,並且您的程序希望在endOfString之后或startOfString之前有一個空格,這顯然絕不是這種情況。 嘗試^(?:a(b)|c(d))$ ,這與您重復了^$

您自己的^a(b)$|^c(d)$也可以工作(如果刪除空格)。

另外,您真的從cd獲得了c嗎? 從正則表達式判斷,如果我們正在談論捕獲組,則應該得到d

另外,請注意,您正在提取捕獲組。 如果將正則表達式合並,則提取的d將為$ 2,而b將為$ 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM