如何用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才替换
先用AU3判断一下字符串里是否存在test,存在地话用正则删除空格前的字符,再用逗号分隔符串,再把分隔出的字符串加上test,思路就是这样...
二○二五年十一月五日 本帖最后由 3131210 于 2025-11-6 00:22 编辑
(:?+)
替换的值 在au3里面写成 $1应该就可以了缺点是 开头多了一个空格
邪恶海盗 发表于 2025-11-5 20:52
先用AU3判断一下字符串里是否存在test,存在地话用正则删除空格前的字符,再用逗号分隔符串,再把分隔出的字 ...
谢谢回复, 我的需求是只用正则表达式达到 3131210 发表于 2025-11-5 23:48
(:?+)
替换的值 在au3里面写成 $1应该就可以了缺点是 开头多了一个空格
谢谢回复.
需满足在test出现的前提下, 才去replace 需要判断那就用三目,也简单,没必要纠结于仅 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) 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的每个项上 zilongasd 发表于 2025-11-6 15:28
谢谢afan版主的回复, 这样确实可行.
纠结这个, 只是为了在已经设计好的程序中, 在不更新的前提下, 来达 ...
你这需求也就多一行提取前面字符的正则匹配就行~ 一次 StringRegExpreplace 就完成不现实…… afan 发表于 2025-11-7 18:03
你这需求也就多一行提取前面字符的正则匹配就行~ 一次 StringRegExpreplace 就完成不现实…… ...
我以为我想不到一次性解决的办法 一度下结论 不可能做到
我猜他是编译好了的软件不能修改,然后读取ini 传递2个参数以此修改?不然我也想不到为什么不修改了重新编译 3131210 发表于 2025-11-8 18:06
我以为我想不到一次性解决的办法 一度下结论 不可能做到
我猜他是编译好了的软件不能修改,然后读取i ...
那就只有LZ自己清楚了哈~ 可能是写死了 StringRegExpreplace 读取配置文件的表达式及替换参数了 afan 发表于 2025-11-9 13:24
那就只有LZ自己清楚了哈~ 可能是写死了 StringRegExpreplace 读取配置文件的表达式及替换参数了 ...
是的, 确实是这样
谢谢大家的帮助.
页:
[1]