2013-07-29 59 views
9

我想用正則表達式匹配從IIX的羅馬數字。斯卡拉正則表達式ignorecase

val pattern = "(\\sI\\s|\\sII\\s|\\sIII\\s|\\sIV\\s|\\sV\\s|\\sVI\\s|\\sVII\\s|\\sVIII\\s|\\sIX\\s)".r 

這隻能匹配大寫。我想忽略這種情況。

我的測試字符串是"Mark iii "

回答

16

嘗試這樣:

"\\s(?i)(?:I{1,3}|IV|VI{0,3}|I?X)\\s" 

其中(?i)使不區分大小寫的匹配。

請注意,您可能需要使用單詞邊界,而不是空間的char:

"\\b(?i)(?:I{1,3}|IV|VI{0,3}|I?X)\\b" 

否則"Mark iii."將不匹配。

+0

非常感謝。這工作。 – qingpan

10

使用Java正則表達式special construct在你的正則表達式的前面不區分大小寫的匹配(我):(我)

VAL patternic = 「」「(\的sI \ S | \ SII \ S | \ SIII \ S | \ SIV \ S | \ SV \ S | \ SVI \ S | \ SVII \ S | \ SVIII \ S |。\六\ S) 「」」 R

實施例在斯卡拉翻譯:

scala> val pattern = 
"""(\sI\s|\sII\s|\sIII\s|\sIV\s|\sV\s|\sVI\s|\sVII\s|\sVIII\s|\sIX\s)""".r 
pattern: scala.util.matching.Regex = (\sI\s|\sII\s|\sIII\s|\sIV\s|\sV\s|\sVI\s|\sVII\s|\sVIII\s|\sIX\s) 

scala> pattern findPrefixMatchOf " VI " 
res3: Option[scala.util.matching.Regex.Match] = Some(VI) 

scala> pattern findPrefixMatchOf " vi " 
res6: Option[scala.util.matching.Regex.Match] = None 

scala> val patternic = """(?i)(\sI\s|\sII\s|\sIII\s|\sIV\s|\sV\s|\sVI\s|\sVII\s|\sVIII\s|\sIX\s)""".r 
patternic: scala.util.matching.Regex = (?i)(\sI\s|\sII\s|\sIII\s|\sIV\s|\sV\s|\sVI\s|\sVII\s|\sVIII\s|\sIX\s) 

scala> patternic findPrefixMatchOf " VI " 
res7: Option[scala.util.matching.Regex.Match] = Some(VI) 


scala> patternic findPrefixMatchOf " vi " 
res9: Option[scala.util.matching.Regex.Match] = Some(vi) 
0

我最近被提供了一個非常長的cas e不敏感的Java正則表達式,我決定不要惹它,並保持原樣。這是一種Java方法,但它也可以在Scala中使用。

import java.util.regex.Pattern 

val EmailPattern = Pattern.compile(
    "PatternGoesHere", 
    Pattern.CASE_INSENSITIVE 
) 
val result = EmailPattern.matcher("StringToMatch").matches()