gpt4 book ai didi

regex - 使用正则表达式查找和替换字符串中可变数量的项目

转载 作者:行者123 更新时间:2023-12-05 04:11:22 26 4
gpt4 key购买 nike

我有几个看起来像这样的字符串:

sum({foo, c[0663, 0667, 0673, 0677, 0693, 0697, 0703, 0707]})
sum({foo, c[0663, 0667, 0673, 0677, 0693]})
sum({foo, c[0697, 0703, 0707]})
sum({foo, c[0693, 0697, 0703, 0707]})

我可以找到所有这些,使用这个正则表达式:

sum\(\{foo, c\[(?:(\d{4})(, )?)+\]\}\)

当我需要替换包含 4 位数字的变量出现的行时,问题出现了,用逗号和空格分隔。

所以第一行的输出应该是这样的:

[1234] 0663 + [1234] 0667 + [1234] 0673 + [1234] 0677 + [1234] 0693 + [1234] 0697 + [1234] 0703 + [1234] 0707

第二行:

[1234] 0663 + [1234] 0667 + [1234] 0673 + [1234] 0677 + [1234] 0693

等等。

所以基本上,所有出现的四位字符都必须替换为:

[1234] xxxx

(“[1234]”是一个常量字符串)(x代表一个数字)

, 

(逗号空格)

必须替换为

+

(加号)

因此,行首和行尾都不能有+号,因此,这四位数字与“,”(逗号空格)分开处理。

通常,我会像这样进行替换模式:

[1234] \1

但这会将 [1234] 和最后保存的模式放在一起,因此在第一行的情况下,它将被替换为:

[1234] 0707

此外,“,”(逗号空格)部分必须始终替换为加号。

最佳答案

使用基于 \G 的正则表达式和条件替换模式:

查找内容:(?:\G,\h*|^sum\(\{foo,\h*c\[)(\d{4})(\]\}\))?
替换为:(?{2}[1234] $1:[1234] $1 + )

注意:如果]})必须出现在行尾,添加$ - (\]\}\)$)?

enter image description here

详细信息:

  • (?:\G,\h*|^sum\(\{foo,\h*c\[) - sum({foo, c[ 喜欢字符串/行开头的模式(参见 ^sum\(\{foo,\h*c\[) 或前面成功匹配的结尾 , 和 0+ 个水平空格(参见 \G,\h*)
  • (\d{4}) - 第 4 组:恰好四位数
  • (\]\}\))? - 可选的第 2 组:]}) 的序列,一次或零次

替换模式:

  • (?{2} - (条件替换模式开始) 如果第 2 组匹配:
    • [1234] $1 - 文字 [1234] 子字符串和第 1 组值
    • : - 否则
    • [1234] $1 + - 文字 [1234] 子字符串、第 1 组值和 + 文字字符序列
  • ) - 条件替换结束。

关于regex - 使用正则表达式查找和替换字符串中可变数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817697/

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