16

Itoからのローマ数字をIX正規表現と一致させようとしています。

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 に答える