AHK 做自动化时,经常要处理文本:窗口标题、剪贴板内容、网页返回值、Excel 单元格、日志文件、文件名。新手最容易一上来就用正则,结果越写越乱。更稳的顺序是:能用普通字符串函数解决,就先不用正则。

先给结论

  • 判断是否包含:用 InStr()
  • 截取固定位置:用 SubStr()
  • 按分隔符拆分:用 StrSplit()Loop, Parse
  • 普通替换:用 StrReplace()
  • 格式复杂、位置不固定:再用 RegExMatch()RegExReplace()

包含判断:InStr

InStr() 返回匹配位置。能找到就是非 0,找不到就是 0,很适合做关键词判断。

#Requires AutoHotkey v1.1
text := "订单状态:已付款,等待发货"

if InStr(text, "已付款")
    MsgBox, 可以进入发货流程
else
    MsgBox, 还不能处理

固定位置截取:SubStr

如果文本结构稳定,比如日期、编号、固定前缀,SubStr() 比正则更直观。

code := "AHK-2026-0001"
year := SubStr(code, 5, 4)
MsgBox, % year

按符号拆开:StrSplit

遇到 CSV、路径、配置项、剪贴板里的多列文本,先看能不能用分隔符拆开。

line := "张三,18,广西"
arr := StrSplit(line, ",")

MsgBox, % "姓名:" arr[1] "`n年龄:" arr[2] "`n地区:" arr[3]

批量替换:StrReplace

普通文本替换不要急着上正则。比如清理空格、替换换行、去掉固定符号,StrReplace() 更好读。

text := "A H K 自 动 化"
text := StrReplace(text, " ")
MsgBox, % text

什么时候才用正则

当你要找的是“某种格式”,而不是“某个固定词”,正则才值得出场。比如从一段文字中提取手机号、日期、金额、IP 地址。

text := "客户电话:13800138000,金额:256.50"

if RegExMatch(text, "电话:(\d+),金额:([\d.]+)", m) {
    phone := m1
    money := m2
    MsgBox, % phone "`n" money
}

文本处理的推荐顺序

我的建议是按这个顺序判断:固定文本用 InStr,固定位置用 SubStr,固定分隔符用 StrSplit,普通替换用 StrReplace,最后再考虑正则。这样脚本更容易维护,也更适合以后让 AI 帮你改。

 

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。