我有几个字符串,如下所示:
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
此外,"," (逗号空格)部分必须始终替换为加号。
答案 0 :(得分:2)
使用基于\G
的正则表达式和条件替换模式:
查找内容:(?:\G,\h*|^sum\(\{foo,\h*c\[)(\d{4})(\]\}\))?
替换为:(?{2}[1234] $1:[1234] $1 + )
注意:如果]})
必须显示在该行的末尾,请添加$
- (\]\}\)$)?
<强>详情:
(?:\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组值和 +
文字字符序列)
- 有条件替换的结束。