2013-07-29 1 views
9

Iからまでのローマ数字を正規表現で照合しようとしています。Scala regex 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)がケースに小文字を区別しないマッチングを可能にします

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

答えて

16

はこのような何かを試してみてください。あなたが代わりにスペース文字の単語の境界を使用することがあります

注:

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

そう"Mark iii."が一致しません。

+0

ありがとうございました。この作業。 – qingpan

10

大文字と小文字を区別しないマッチングのためにあなたの正規表現の前でのJava正規表現special constructを使用します(?I)(\ SI \ s "の "

ヴァルpatternic = " | \ SII(I?) \よ|。\ SIII \ sの| \ SIV \ sの| \ SV \ sの| \ SVI \ sの| \ sVII \ sの| \ sVIII \ sの|

R

「 "" \ SIX \ s)実施例スカラ通訳:

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

最近私は非常に長いキャスe非感受性のJava正規表現を、私はちょうどそれを混乱させないようにし、それをそのまま残しました。これはJavaのアプローチですが、Scalaでも使用できます。

import java.util.regex.Pattern 

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