2013-11-15 65 views
2

我必須在日誌文件中掩蓋feild的值直到最後四位。問題是數字的長度不固定。它可以是16位或更多。屏蔽所有數字但最後四位

例如

ExtnTinNo = 「1234567891234567」

的Regex = (ExtnTinNo =)([ 「'] [^」'] \ d {12})

它工作正常,但是當它超過16位數時,未掩碼的數字將超過4.如果存在空間黑白字體,=和值,則失敗

+1

什麼語言/工具,你使用這個屏蔽? – anubhava

回答

2

這應該捕捉你想要的內容:

(ExtnTinNo=)(["'][^"']*?)\d{4}["'] 

我不確定你應該在組中捕獲什麼,所以我把它們留在原來的正則表達式中。組1匹配'EXtnTinNo =',組2匹配引號,後面跟着要掩碼的數字。

擊穿:

(ExtnTinNo=)匹配ExtnTinNo =明顯

\d{4}["']關閉之前的最後4位數字匹配 「或 '

(["'][^"']*?)匹配之間的一切,即' 或」 後面的數字掩蓋

0

考慮以下正則表達式...

(?<=(ExtnTinNo=)(["'][^"']*?))\d{4}(?=["']) 

祝你好運!

2

我假設你想轉換成文字是這樣的:

ExtnTinNo="1234567891234567" 
ExtnTinNo="12345678912345678912345" 

是這樣的:

ExtnTinNo="****4567" 
ExtnTinNo="****2345" 

如果是這樣,你應該嘗試以下正則表達式:

(?<=ExtnTinNo=['"])\d{12,}(?=[\d]{4}["']) 

這將匹配您的號碼中的所有數字,除了最後4位。這意味着它將匹配以下內容:

ExtnTinNo="1234567891234567" 
      ^^^^^^^^^^^^ 
ExtnTinNo="12345678912345678912345" 
      ^^^^^^^^^^^^^^^^^^^ 

通過簡單地使用正則表達式替換,您將得到上面給出的結果。

它的工作原理是這樣的:

(?<=ExtnTinNo=['"]) - checks that the number is preceded by ExtnTinNo=" 
         (not included in the match) 
\d{12,}    - matches 12 or more numbers 
(?=[\d]{4}["'])  - if these 12 numbers are followed by another 4 numbers 
         and a " or ' (not included in the match) 

請注意,這並不能掩蓋你的空白的問題!根據您的正則表達式引擎,您甚至可以在=周圍添加可選的空白。但是,並非所有引擎都支持可變長度的後視圖!例如,在。NET應該是可以使用的:

(?<=ExtnTinNo\s*=\s*['"])\d{12,}(?=[\d]{4}["']) 

(見demo here,單擊「背景」選項卡,查看更換後的結果)