我必須在日誌文件中掩蓋feild的值直到最後四位。問題是數字的長度不固定。它可以是16位或更多。屏蔽所有數字但最後四位
例如
ExtnTinNo = 「1234567891234567」
的Regex = (ExtnTinNo =)([ 「'] [^」'] \ d {12})
它工作正常,但是當它超過16位數時,未掩碼的數字將超過4.如果存在空間黑白字體,=和值,則失敗
我必須在日誌文件中掩蓋feild的值直到最後四位。問題是數字的長度不固定。它可以是16位或更多。屏蔽所有數字但最後四位
例如
ExtnTinNo = 「1234567891234567」
的Regex = (ExtnTinNo =)([ 「'] [^」'] \ d {12})
它工作正常,但是當它超過16位數時,未掩碼的數字將超過4.如果存在空間黑白字體,=和值,則失敗
這應該捕捉你想要的內容:
(ExtnTinNo=)(["'][^"']*?)\d{4}["']
我不確定你應該在組中捕獲什麼,所以我把它們留在原來的正則表達式中。組1匹配'EXtnTinNo =',組2匹配引號,後面跟着要掩碼的數字。
擊穿:
(ExtnTinNo=)
匹配ExtnTinNo =明顯
\d{4}["']
關閉之前的最後4位數字匹配 「或 '
(["'][^"']*?)
匹配之間的一切,即' 或」 後面的數字掩蓋
考慮以下正則表達式...
(?<=(ExtnTinNo=)(["'][^"']*?))\d{4}(?=["'])
祝你好運!
我假設你想轉換成文字是這樣的:
到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,單擊「背景」選項卡,查看更換後的結果)
什麼語言/工具,你使用這個屏蔽? – anubhava