我想匹配字符串
的正则表达式2=abc\u000148=123\u0001
解释
SOH(\u0001)
characeter分隔的键值对
"="
我试过的正则表达式是
[0-9]=.*[u0001]+
但它没有正确匹配
更新
val num =Seq(2,3,4)
输入
2=abc\u000148=123\u00013=def\u0001
输出它是过滤后的字符串
148=123\u0001 ,where keys which match value 2 and 3 are removed from list
object Main extends App {
val s = "2=abc\u000148=123\u00013=def\u0001"
val num = Seq(2,3)
for (e <- num) {
val p = s"(\\$e+)=([^\u0001]*)".r
test(p)
}
private def test(p: Regex) = {
p.findAllIn(s).matchData foreach {
m => println(m.group(1) + " : " + m.group(2))
}
}
}
答案 0 :(得分:2)
您需要动态构建模式:
s"\\b(?:${num.mkString("|")})=[^\\u0001]*\\u0001*"
<强>详情
\b
- 字边界(?:num1|num2...|numN)
- num
变量=
- 等号[^\u0001]*
- 除SOH字符以外的零个或多个字符(十进制代码为1的字符)\u0001*
- 零个或多个SOH字符。查看Scala demo:
val num = Seq(2,3)
val s = "1041=pqr\u000148=xyz\u000122=8\u00012=abc\u000148=123\u00013=def\u0001"
val pattern = s"\\b(?:${num.mkString("|")})=[^\\u0001]*\\u0001*"
// println(pattern) // => \b(?:2|3)=[^\u0001]*\u0001*
println(s.replaceAll(pattern, ""))
// => 1041=pqr\u000148=xyz\u000122=8\u000148=123\u0001
答案 1 :(得分:-1)
你在想这个吗?
[0-9]+=.*?\[u0-9\.,]+