如何解决正则表达式:将“ @@”替换为“ @”,并将“ @”替换为某些字符串
问题:
我是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 举报,一经查实,本站将立刻删除。