gpt4 book ai didi

regex - 屏蔽除最后四位之外的所有数字

转载 作者:行者123 更新时间:2023-12-03 09:26:34 26 4
gpt4 key购买 nike

我必须屏蔽日志文件中的字段值,直到最后四位数字。问题是数字长度不固定。可以是 16 位或更多。

例如

ExtnTinNo="1234567891234567"

正则表达式 = (ExtnTinNo=)(["'][^"']\d{12})

它工作正常,但是当它超过 16 位数字时,未屏蔽的数字将超过 4。此外,如果存在空格 b/w feild,= 和 value ,则会失败

最佳答案

我假设您想要像这样转换文本:

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,点击“Context”选项卡查看替换后的结果)

关于regex - 屏蔽除最后四位之外的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com