2017-09-26 368 views
1

我想匹配一个正则表达式的字符串正则表达式匹配一个ASCII字符

2=abc\u000148=123\u0001 

说明

  1. 键值来SOH(\u0001) characeter分离对
    • 关键 - 数字
    • 数值可以是字符串,字母,小数点
  2. 键和值是由"="

我尝试的正则表达式分离是

[0-9]=.*[u0001]+ 

,但它不符合正常

更新

  • 我有一个数字val num =Seq(2,3,4)
  • 而是找到我想从字符串中删除比赛
  • 键,我想替换的是值列表NUM内的列表

输入

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

是它的JavaScript? –

+0

@WiktorStribiżew更新了标签,但正则表达式在所有地方都是一样的,我猜 – coder25

+0

然后你可以试试''“”(\ d +)=([^ \ u0001] *)“”“' –

回答

1

你需要动态构建模式是这样的:

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 
+0

它工作。我有一些进一步的用例,我应该更新问题或发布一个新的 – coder25

+0

请更新问题,或让我知道通过评论。如果您选择评论,并且涉及共享代码,请使用IDEONE小提琴。 –

+0

已更新问题 – coder25

-1

你在想这个吗?

[0-9]+=.*?\[u0-9\.,]+