我想用正則表達式匹配從I
到IX
的羅馬數字。斯卡拉正則表達式ignorecase
val pattern = "(\\sI\\s|\\sII\\s|\\sIII\\s|\\sIV\\s|\\sV\\s|\\sVI\\s|\\sVII\\s|\\sVIII\\s|\\sIX\\s)".r
這隻能匹配大寫。我想忽略這種情況。
我的測試字符串是"Mark iii "
。
我想用正則表達式匹配從I
到IX
的羅馬數字。斯卡拉正則表達式ignorecase
val pattern = "(\\sI\\s|\\sII\\s|\\sIII\\s|\\sIV\\s|\\sV\\s|\\sVI\\s|\\sVII\\s|\\sVIII\\s|\\sIX\\s)".r
這隻能匹配大寫。我想忽略這種情況。
我的測試字符串是"Mark iii "
。
嘗試這樣:
"\\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."
將不匹配。
使用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)
我最近被提供了一個非常長的cas e不敏感的Java正則表達式,我決定不要惹它,並保持原樣。這是一種Java方法,但它也可以在Scala中使用。
import java.util.regex.Pattern
val EmailPattern = Pattern.compile(
"PatternGoesHere",
Pattern.CASE_INSENSITIVE
)
val result = EmailPattern.matcher("StringToMatch").matches()
非常感謝。這工作。 – qingpan