2017-09-26 366 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\.,]+