2013-07-29 11 views
9

Roman numarasını I'dan IX numaralı regex ile eşleştirmeye çalışıyorum.Scala regex ignorecase

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

Bu, yalnızca büyük harfle eşleşebilir. Davayı görmezden gelmek istiyorum.

Test dizgim "Mark iii "'dur. Böyle

cevap

16

deneyin şey: (?i) harf duyarsız eşleştirme sağlayan

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

. Eğer uzay karakterlerin yerine kelime sınırlarını kullanmak isteyebilirsiniz

Not:

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

aksi "Mark iii." uymaz.

+0

Çok teşekkür ederim. Bu çalışıyor. – qingpan

10

Kullanım Java regex special construct küçük harf duyarsız eşleşmesine yönelik regex önünde (i?): (? I)

val patternic = "" "(\ sı \ s | \ SII \ SIII \ s | | \ SIV \ s | \ sV \ s | \ SVI \ s | \ sVII \ s | \ sVIII \ s. | \ AlTı \ lar) """ r

Örnek \ s scala yorumlayıcı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

Son zamanlarda çok uzun bir cas ile sağlandı Duyarsız Java regex, ben sadece onunla karıştırmaya ve olduğu gibi bırakılmaya karar verdim. Bu bir Java yaklaşımıdır, ancak Scala'da da kullanılabilir.

import java.util.regex.Pattern 

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