gpt4 book ai didi

regex - 编辑捕获组值

转载 作者:行者123 更新时间:2023-12-01 23:36:39 26 4
gpt4 key购买 nike

使用 REGEX 在捕获组中查找模式;现在我需要替换/编辑找到的值。

尝试替换固定长度字段中的值:
要搜索的正则表达式:(\d{10})(.{20}) (.+)

字符串是:

01234567890Alice Stone          3978 Smith st...

我必须用 X 替换捕获组 2(全名)(或者更好的是捕获组 2 中的名字和姓氏)

正则表达式: (\d{10})(.{20})(.+)
替换值 $1xxxxxxxxxxxxxxxxxxxx$3
这行得通,但认为会有一个更迷人的解决方案(也许像 $1 x{20} $3 ),或者甚至更好地以某种方式只是用其中的字母编辑值。

谢谢!

最佳答案

为了制定一个替换字符串,其长度应该匹配一个 - 可能是可变长度 - 输入字符串的子字符串,您需要通过脚本 block (委托(delegate))动态计算替换字符串。

在 PowerShell Core 中,您现在可以直接将脚本 block 作为 -replace operator 的替换操作数传递:

PS> '01234567890Alice Stone          3978 Smith st...' -replace 
'(?<=^\d{10}).{20}', { 'x' * $_.Value.Length }

0123456789xxxxxxxxxxxxxxxxxxxx 3978 Smith st...
  • '(?<=^\d{10} 是一个正向的后向断言,它匹配前 10 个数字而不捕获它们,并且 .{20} 匹配并捕获接下来的 20 个字符。
  • 每次匹配都会调用脚本 block ,$_ 包含手头的匹配作为 [System.Text.RegularExpressions.Match] 实例; .Value 包含匹配的文本。
  • 因此,'x' * $_.Value.Length 返回一串 x 字符。长度与比赛相同。


  • 在 Windows PowerShell 中,您必须直接使用 [regex] type:
    PS> [regex]::Replace('01234567890Alice Stone          3978 Smith st...',
    '(?<=^\d{10}).{20}', { param($m) 'x' * $m.Value.Length })

    0123456789xxxxxxxxxxxxxxxxxxxx 3978 Smith st...

    如果预先知道要替换的子字符串的长度 - 如您的情况 - 您可以更简单地执行以下操作:

    PS> $len = 20; '01234567890Alice Stone 3978 Smith st...' -replace
    "(?<=^\d{10}).{$len}", ('x' * $len)

    0123456789xxxxxxxxxxxxxxxxxxxx 3978 Smith st...

    无条件地编辑所有字母更加简单:
    PS> '01234567890Alice Stone          3978 Smith st...' -replace '\p{L}', 'x'

    01234567890xxxxx xxxxx 3978 xxxxx xx...
    \p{L} 匹配任何 Unicode 字母。

    仅在匹配的子字符串中编辑字母需要嵌套 -replace 操作:
    PS> '01234567890Alice Stone          3978 Smith st...' -replace 
    '(?<=^\d{10}).{20}', { $_ -replace '\p{L}', 'x' }

    01234567890xxxxx xxxxx 3978 Smith st...

    关于regex - 编辑捕获组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57584362/

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