zilongasd 发表于 2025-11-5 14:23:20

如何用StringRegExpreplace在一个正则表达式里面替换满足条件的内容

本帖最后由 zilongasd 于 2025-11-5 14:25 编辑

例如想将'test 1,2,3,4'这个字符串替换为'test 1 test 2 test 3 test 4', 但前提是包含test时才替换. 1,2,3,4这个不是固定的, 也可能是1,2,3,4,5,6或其他任意个,\d+的组合
如果不包含test, 则不替换. 例如'abc 1,2,3,4'时, 不替换.

我尝试下面这样写, 但只会替换第2个数字, 即结果为"test 1 test 2,3,4'", 但,3和,4也需要替换为 test 3 test 4
$b='test 1,2,3,4'
msgbox(0,0,StringRegExpreplace($b, 'test (\d+)(?:,(\d+))','test \1 test \2'))

前提是在一个stringregexpreplace中完成, 且满足字符串包含test才替换

邪恶海盗 发表于 2025-11-5 20:52:53

先用AU3判断一下字符串里是否存在test,存在地话用正则删除空格前的字符,再用逗号分隔符串,再把分隔出的字符串加上test,思路就是这样...


二○二五年十一月五日

3131210 发表于 2025-11-5 23:48:43

本帖最后由 3131210 于 2025-11-6 00:22 编辑

(:?+)
替换的值 在au3里面写成 $1应该就可以了缺点是 开头多了一个空格


zilongasd 发表于 2025-11-6 09:14:25

邪恶海盗 发表于 2025-11-5 20:52
先用AU3判断一下字符串里是否存在test,存在地话用正则删除空格前的字符,再用逗号分隔符串,再把分隔出的字 ...

谢谢回复, 我的需求是只用正则表达式达到

zilongasd 发表于 2025-11-6 09:18:23

3131210 发表于 2025-11-5 23:48
(:?+)
替换的值 在au3里面写成 $1应该就可以了缺点是 开头多了一个空格



谢谢回复.
需满足在test出现的前提下, 才去replace

afan 发表于 2025-11-6 14:29:05

需要判断那就用三目,也简单,没必要纠结于仅 StringRegExpreplace ...
;~ $b = 'abc 1,2,3,4'
$b = 'test 1,2,3,4'
MsgBox(0, $b, StringRegExp($b, '^test') ? StringRegExpReplace($b, ',(\d)', ' test $1') : $b)

zilongasd 发表于 2025-11-6 15:28:49

afan 发表于 2025-11-6 14:29
需要判断那就用三目,也简单,没必要纠结于仅 StringRegExpreplace ...

谢谢afan版主的回复, 这样确实可行.

纠结这个, 只是为了在已经设计好的程序中, 在不更新的前提下, 来达到这个目的.

其实原始需求就是取出第一个数字前面的连续字符串, 将后面紧跟的逗号替换为取出的字符串
$b = 'test 1,2,3,4'
MsgBox(0, $b, StringRegExpReplace($b, '(\w+) (\d+)|,(\d+)', '$1 $2 $1 $3'))
;=>输出为test 1 test 2 3 4
;但这并不是我预期的test 1 test 2 test 3 test 4. 曲解了$1能像直接输入的字符串那样重复到$3的每个项上

afan 发表于 2025-11-7 18:03:50

zilongasd 发表于 2025-11-6 15:28
谢谢afan版主的回复, 这样确实可行.

纠结这个, 只是为了在已经设计好的程序中, 在不更新的前提下, 来达 ...

你这需求也就多一行提取前面字符的正则匹配就行~ 一次 StringRegExpreplace 就完成不现实……

3131210 发表于 2025-11-8 18:06:14

afan 发表于 2025-11-7 18:03
你这需求也就多一行提取前面字符的正则匹配就行~ 一次 StringRegExpreplace 就完成不现实…… ...

我以为我想不到一次性解决的办法    一度下结论 不可能做到

我猜他是编译好了的软件不能修改,然后读取ini 传递2个参数以此修改?不然我也想不到为什么不修改了重新编译

afan 发表于 2025-11-9 13:24:36

3131210 发表于 2025-11-8 18:06
我以为我想不到一次性解决的办法    一度下结论 不可能做到

我猜他是编译好了的软件不能修改,然后读取i ...

那就只有LZ自己清楚了哈~ 可能是写死了 StringRegExpreplace 读取配置文件的表达式及替换参数了

zilongasd 发表于 2025-11-10 10:31:58

afan 发表于 2025-11-9 13:24
那就只有LZ自己清楚了哈~ 可能是写死了 StringRegExpreplace 读取配置文件的表达式及替换参数了 ...

是的, 确实是这样
谢谢大家的帮助.
页: [1]
查看完整版本: 如何用StringRegExpreplace在一个正则表达式里面替换满足条件的内容