16

我正在尝试将罗马数字从ItoIX与正则表达式匹配。

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

这只能匹配大写。我想忽略这个案子。

我的测试字符串是"Mark iii ".

4

3 回答 3

38

尝试这样的事情:

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

其中(?i)启用不区分大小写的匹配。

请注意,您可能希望使用单词边界而不是空格字符:

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

否则"Mark iii."将不匹配。

于 2013-07-29T18:00:10.833 回答
16

使用正则表达式前面的 Java 正则表达式特殊构造(?i) 进行不区分大小写的匹配:

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

scala解释器中的示例:

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 )
于 2013-07-29T18:00:19.137 回答
4

我最近收到了一个很长的不区分大小写的 Java 正则表达式,我决定不要弄乱它并保持原样。这是一种 Java 方法,但也可以在 Scala 中使用。

import java.util.regex.Pattern

val EmailPattern = Pattern.compile(
  "PatternGoesHere", 
  Pattern.CASE_INSENSITIVE
)
val result = EmailPattern.matcher("StringToMatch").matches()
于 2017-12-15T08:22:48.863 回答