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

标签 regex

我必须屏蔽日志文件中的字段值,直到最后四位数字。问题是数字长度不固定。可以是 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/

相关文章:

regex - 如何在 Perl 正则表达式中匹配除 and、or、||、&& 之外的内容

正则表达式只匹配 5 个字母的单词

C# 分割逗号分隔值

python - Python 中的取消转义字符串

python - Pandas - 过滤和正则表达式搜索 DataFrame 的索引

jquery - 数据表精确单词搜索

c# - 正则表达式捕获括号组,包括内括号和外括号

Java - 使用正则表达式从 requestURI 中提取电子邮件地址

c# - 仅当逗号在双引号之外时才按逗号拆分字符串#

c# - 正则表达式匹配从头开始