式を入力して、 (AAA)の形式になるように入力をフィルタ処理する方法を教えてください。ここでAは0-9の数値です。 EX:(123)、(592)、(999)Scalaエスケープ文字正規表現
-1
A
答えて
0
は、通常は、そのような"[0-9]".r
として、文字列上で利用可能な.r
方法を使用して正規表現を作成します。しかし、あなたが気づいたように、それはあなたが正規表現ではなく文字列にエスケープ文字を挿入したいとパーザが考えているので、エスケープ文字を補間することができないことを意味します。
このために、バックスラッシュと改行を含む正確な文字列の文字列を作成するScalaの三重引用符付き文字列を使用できます。 あなたのように正規表現を作成するには、"""\(\d\d\d\)""".r
と書くことができます。使用中の例は次のとおりです。
val regex = """\(\d\d\d\)""".r.pattern
Seq("(123)", "(---)", "456").filter(str => regex.matcher(str).matches)
+0
または 'リスト("(123) "、" xyz "、"(456) ")フィルター(pattern.asPredicate.test)'またはそれに類するもの。 –
1
通常、フィルタ以上の処理を行います。
scala> val r = raw"\(\d{3}\)".r
r: scala.util.matching.Regex = \(\d{3}\)
scala> List("(123)", "xyz", "(456)").filter { case r() => true case _ => false }
res0: List[String] = List((123), (456))
scala> import PartialFunction.{cond => when}
import PartialFunction.{cond=>when}
scala> List("(123)", "xyz", "(456)").filter(when(_) { case r() => true })
res1: List[String] = List((123), (456))
各入力からすべての一致を維持:
scala> List("a(123)b", "xyz", "c(456)d").flatMap(s =>
| r.findAllMatchIn(s).map(_.matched).toList)
res2: List[String] = List((123), (456))
scala> List("a(123)b", "xyz", "c(456)d(789)e").flatMap(s =>
| r.findAllMatchIn(s).map(_.matched).toList)
res3: List[String] = List((123), (456), (789))
維持するだけで最初:
scala> val r = raw"(\(\d{3}\))".r.unanchored
r: scala.util.matching.UnanchoredRegex = (\(\d{3}\))
scala> List("a(123)b", "xyz", "c(456)d(789)e").flatMap(r.unapplySeq(_: String)).flatten
res4: List[String] = List((123), (456))
scala> List("a(123)b", "xyz", "c(456)d(789)e").collect { case r(x) => x }
res5: List[String] = List((123), (456))
と一致する行全体の維持:
scala> List("a(123)b", "xyz", "c(456)d(789)e").collect { case s @ r(_*) => s }
res6: List[String] = List(a(123)b, c(456)d(789)e)
のJava APIを:
scala> import java.util.regex._
import java.util.regex._
scala> val p = Pattern.compile(raw"(\(\d{3}\))")
p: java.util.regex.Pattern = (\(\d{3}\))
scala> val q = p.asPredicate
q: java.util.function.Predicate[String] = java.util.regex.Pattern$$Lambda$1107/[email protected]
scala> List("(123)", "xyz", "(456)").filter(q.test)
res0: List[String] = List((123), (456))
関連する問題
- 1. 正規表現エスケープ文字
- 2. 正規表現のエスケープ@文字
- 3. Java正規表現エスケープ文字
- 4. 文字クラスのJava正規表現の不正なエスケープ文字
- 5. エスケープ文字で正規表現を解析する正規表現
- 6. 可能なエスケープ文字の文字列の正規表現
- 7. 正規表現エスケープ構文R(strsplit)
- 8. scala - 正規表現
- 9. エスケープ正規表現改行
- 10. 正規表現の文字列をエスケープしますか?
- 11. エスケープ文字を含むJavaパターンの正規表現
- 12. 正規表現マッチアンパサンドではなく、エスケープXML文字
- 13. htmlspecialcharsをエスケープ文字に変換する正規表現
- 14. 一部の文字をエスケープする正規表現のJavaScript
- 15. Rスタイルの正規表現で一致するエスケープ文字
- 16. 正規表現でエスケープ文字を避ける
- 17. Perl正規表現で特殊文字をエスケープする
- 18. 正規表現で文字列をエスケープできますか?
- 19. HTMLタグ付き正規表現とエスケープ文字が
- 20. perlの正規表現のエスケープ文字は
- 21. リテラル対エスケープ文字を使用した正規表現
- 22. 正規表現の特殊文字をエスケープする
- 23. Python 2.6の正規表現。ウィンドウ内の文字をエスケープする
- 24. Python正規表現の改行エスケープ文字
- 25. PythonとPerlの正規表現のバックスラッシュとエスケープ文字
- 26. 正規表現で特殊文字をエスケープする方法***(。*)
- 27. 正規表現として渡されるエスケープ文字列
- 28. 正規表現文字列
- 29. 正規表現 - 文字
- 30. 文字の正規表現、
逆参照 '(\ d)\ 1 *' – Tushar