微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式:将“ @@”替换为“ @”,并将“ @”替换为某些字符串

如何解决正则表达式:将“ @@”替换为“ @”,并将“ @”替换为某些字符串

问题: 我是regex的新手,我有字符串
"this @ is @@ sample @@@ string @@@@" 并具有目标字符串"xxx"
就是这样,
'@'替换为"xxx"(目标字符串)
'@@'替换为'@'

所以输出看起来像这样,
this xxx is @ sample @xxx string @@


* 我尝试过的操作(scala)

"this @ is @@ sample @@@ string @@@@".replaceAll("@@","\u0000").replaceAll("@","xxx").replaceAll("\u0000","@")

但是问题是,如果源字符串包含\u0000,它将被@替换

因此,涉及到正则表达式是否可以选择不连续两次的@,因此对于"this @ is @@ sample @@@ string @@@@",我们将仅用不连续两次的目标字符串代替,例如

“此@是@@示例@@ @字符串@@@@” (匹配的两个结果将替换为目标字符串xxx
而不是简单地.replaceAll("@@","@")

解决方法

您可以使用

val text = "this @ is @@ sample @@@ string @@@@"
val regex = "@@?".r
println(regex.replaceAllIn(text,m => if (m.group(0).length == 1) "xxx" else "@"))

看到Scala demo,输出:

this xxx is @ sample @xxx string @@

@@?模式匹配一​​个或两个@字符。如果匹配值的长度为1,则替换为xxx,否则为@

,

不需要正则表达式。 (至少没有明显的正则表达式用法。)

"this @ is @@ sample @@@ string @@@@"
  .split("@@",-1)
  .map(_.replaceAll("@","xxx"))
  .mkString("@")
//res0: String = this xxx is @ sample @xxx string @@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。