正则表达式:获取字符串中所有数字的编号捕获

时间:2013-03-23 19:53:54

标签: regex autohotkey

如何捕获给定字符串中的所有数字?它们是浮点数,整数,正数还是负数都无关紧要。它应该捕获50或100.25或12345678或-78.999作为编号捕获。

我的目的是找到并替换字符串中的第n个数字(autohotkey)。

正则表达式应该将所有匹配捕获到数组中。

到目前为止,我已经提出了这个正则表达式(它似乎只捕获了第一场比赛):

[-+]?\d+(\.\d+)?

如果您有兴趣,这是我的自动按键功能:

ReplaceNumber(whattext, instance, replacewith){
    numpos := regexmatch(whattext, "Ox)[-+]?\d+(\.\d+)?", thisnumber)
    returnthis := thisnumber.value(instance)
    return returnthis
}

2 个答案:

答案 0 :(得分:1)

似乎AutoHotKey uses PCRE,所以以下正则表达式应该完成这项工作:

[+-]?\d+(?:\.\d+)?

答案 1 :(得分:1)

使用polyethene的grep函数,你可以给它一个正则表达式字符串,它将返回所有匹配的分隔字符串。然后,您可以用字符串替换该数字的确切实例。在this thread(感谢HamZa DzCyber​​DeV),有一个解释为什么会这样。

(你需要grep script!)

ReplaceNumber(whattext, instance, replacewith){
    numpos := grep(whattext, "[+-]?\d+(?:\.\d+)?",thisnumber,1,0,"|")
    stringsplit, numpos, numpos,|
    stringsplit, thisnumber,thisnumber,|

    thispos := numpos%instance%   ;get the position of the capture
    thisinstance := thisnumber%instance%  ;get the capture itself
    thislen := strlen(thisinstance) 
    ;now fetch the string that comes before the named instance
    leftstring := substr(whattext, 1, thispos-1)
    rightstring := substr(whattext, thispos+thislen, strlen(whattext))

    returnthis := leftstring . replacewith . rightstring

    return returnthis
}
msgbox, % replacenumber("7 men swap 55.2 or 55.2 for 100 and -100.", 5, "SWAPPED")

结果:

; 1-->  SWAPPED men swap 55.2 for 100 and -100.
; 2-->  7 men swap SWAPPED or 55.2 for 100 and -100.
; 3 --> 7 men swap 55.2 or SWAPPED for 100 and -100.
; 4 --> 7 men swap 55.2 or 55.2 for SWAPPED and -100.
; 5 --> 7 men swap 55.2 or 55.2 for 100 and SWAPPED.

谢谢,聚乙烯和hamza!