AutoIt正则表达式过滤字符串:如何获取指定匹配结果?
解决AutoIt正则提取数字并拼接的问题
你的问题出在两个关键点上:一是原正则表达式只能匹配第一个连续的数字+小数点序列,漏掉了Q后面的9;二是使用了$STR_REGEXPARRAYMATCH,它只会返回第一个匹配结果,而非所有符合条件的匹配项。
我们可以通过调整正则规则和匹配模式来实现需求:
修改后的代码
$strLine = "100.11 Q9" ; 匹配所有数字序列(包含带小数点的和纯整数的) $sortString = StringRegExp($strLine, '(\d+\.?\d*)', $STR_REGEXPARRAYGLOBALMATCH) ; 把匹配到的两个数字用空格拼接 $result = $sortString[0] & " " & $sortString[1] MsgBox(0, "", $result, 2)
代码说明
- 正则表达式
(\d+\.?\d*):\d+:匹配1个或多个数字\.?:匹配可选的小数点(?表示该字符出现0次或1次)\d*:匹配0个或多个数字(既兼容带小数点的数字如100.11,也能匹配纯整数如9)
- 匹配模式
$STR_REGEXPARRAYGLOBALMATCH:
这个参数会让StringRegExp返回所有匹配到的结果,而不是仅第一个。这样就能同时获取100.11和9两个目标内容。 - 结果拼接:
把数组里的两个元素用空格连接,就得到你想要的100.11 9。
如果你的字符串可能包含更多数字部分(比如"100.11 Q9 X123"),可以用循环来自动拼接所有匹配项,避免硬编码索引:
$strLine = "100.11 Q9 X123" $sortString = StringRegExp($strLine, '(\d+\.?\d*)', $STR_REGEXPARRAYGLOBALMATCH) $result = "" For $match In $sortString $result &= $match & " " Next ; 去掉最后多余的空格 $result = StringTrimRight($result, 1) MsgBox(0, "", $result, 2)
内容的提问来源于stack exchange,提问作者Wei
相关产品推荐
相关产品推荐

