我在python中有以下内容:
regex.sub(lambda t: t.group(1).replace(" ", " ") + t.group(2),string)
其中regex
是正则表达式,string
是填充字符串。
所以我试图在Scala中使用regex.replaceAllIn(...)
函数而不是python sub
来做同样的事情。但是,我不知道如何获得匹配的子组。
在Scala中是否有与python函数group
类似的内容?
答案 0 :(得分:3)
scaladoc有一个例子。提供Match
而不是字符串的函数。
scala> val r = "a(b)(c)+".r
r: scala.util.matching.Regex = a(b)(c)+
scala> val s = "123 abcccc and abcc"
s: String = 123 abcccc and abcc
scala> r.replaceAllIn(s, m => s"a${m.group(1).toUpperCase}${m.group(2)*3}")
res0: String = 123 aBccc and aBccc
结果字符串也会进行组替换。
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
答案 1 :(得分:2)
您可以使用replaceAll
,并使用$n
,其中“n”是您要匹配的群组。例如:
yourString.replaceAll(yourRegex, "$1")
将匹配的部分替换为第一组。
答案 2 :(得分:1)
也许其他方法可以使用distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip
,例如:
regex
然后匹配val regExtractor = """a(b+)(c+)(d*)""".r
String:
val string = "abbbbbbbbbccdd"
val newString = string match {
case regExtractor(g1, g2, g3) =>
s"""String Replaced: ${g1.replace(g1, "XXXXX")},
| ${g2.replace(g2, "YYYYY")}""".stripMargin
}
将是:
newString