2013-05-05 3 views
2

Я использую регулярное выражение для заглавной буквы после буквы. или ? или ! но я не могу использовать верхний регистр, есть ли что-то, чего я не вижу?Заглавие первой буквы после периода

val reply = line.replaceAll("""([\.!?])\s+([a-z])""","""$1"""+" "+"""$2""".toUpperCase) 

.toUpperCase не влияет, так что я попытался это:

val pattern = """(?:(.+)?([\.!?])\s+([a-z])(.+)?)+""".r 

    val reply = line match { 
     case pattern(a,b,c,d) => a+b+" "+c.toUpperCase+d 
     case _ => line 
    } 

Это не соответствует все вхождений. и он заглаживает буква только после первого периода.

+2

Первый код не работает, так как '«$ 2»' после того, как верхний регистр является '«$ 2»' (вы изменяете регулярное выражение, а не само слово). –

+0

Хорошо, но как мне это сделать? –

+0

У вас есть пример строки, которая не работает? – thoredge

ответ

7

Вы можете использовать replaceAllIn метод Regex:

scala> """[\.!?]\s+[a-z]""".r.replaceAllIn("abc. abc", _.matched.toUpperCase) 
res0: String = abc. Abc 
+0

'_.matched.toUpperCase' будет более уместным, чем' _.group (0) .toUpperCase' – nadavwr

+0

@nadavwr: исправлено. Спасибо. – senia

Смежные вопросы