7
votes

Comment puis-je obtenir des sous-groupes du match à Scala?

J'ai ce qui suit en python: xxx

regex est une expression régulière et string est une chaîne remplie.

J'essaie donc de faire la même chose à Scala, en utilisant regex.replaceallin (...) fonction au lieu de Python sous . Cependant, je ne sais pas comment obtenir les sous-groupes qui correspondent.

existe quelque chose de similaire à la fonction Python groupe dans Scala?


0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser remplailleLL et utiliser $ n , où "n" est le groupe que vous souhaitez faire correspondre. Par exemple: xxx

remplace les pièces assorties avec le premier groupe.


1 commentaires

Dans le cas exemple, vous pouvez obtenir une nouvelle chaîne capturant tous les groupes n'est-elle pas? Comme dans mon exemple. Quelle serait la meilleure approche?



1
votes

Peut-être que autre moyen de procéder est d'avoir un regex , par exemple: xxx

, puis correspond à la chaîne : xxx

newstring sera: xxx


0 commentaires

3
votes

L'Scaladoc en a un exemple. Fournissez une fonction de correspondez code> au lieu d'une chaîne.

scala> val r = "a(b)(c+)".r
r: scala.util.matching.Regex = a(b)(c+)

scala> r.replaceAllIn(s, m => if (m.group(2).length > 3) "$1" else "$2")
res3: String = 123 b and cc

scala> r.replaceAllIn(s, m => s"$$${ if (m.group(2).length > 3) 1 else 2 }")
res4: String = 123 b and cc


0 commentaires