2013-07-29 9 views
9

Sto cercando di far corrispondere il numero romano da I a IX con un'espressione regolare.Scala regex ignorecase

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

Questo può corrispondere solo al maiuscolo. Voglio ignorare il caso.

La mia stringa di prova è "Mark iii ".

risposta

16

provare qualcosa di simile:

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

dove il (?i) permette caso di corrispondenza insensitive.

Nota che si potrebbe desiderare di utilizzare i confini di parola al posto di caratteri di spazio:

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

altrimenti "Mark iii." non corrisponderanno.

+0

Grazie mille. Questo funziona. – qingpan

10

Utilizzare l'espressione regolare Java special construct nella parte anteriore della vostra regex per case-insensitive corrispondenza (i?): (? I)

val patternic = "" "(\ sl \ s | \ sII \ s | \ sIII \ s | \ sIV \ s | \ sV \ s | \ SVI \ s | \ SVII \ s | \ SVIII \ s |. \ sIX \ s) """ r

Esempio in scala interpreter:

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

Recentemente mi è stato fornito un tempo molto lungo E insensibile regex di Java, ho deciso di non scherzare e lasciato così com'è. È un approccio Java, ma può essere usato anche in Scala.

import java.util.regex.Pattern 

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