如何捕获给定字符串中的所有数字?它们是浮点数,整数,正数还是负数都无关紧要。它应该捕获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
}
答案 0 :(得分:1)
似乎AutoHotKey uses PCRE,所以以下正则表达式应该完成这项工作:
[+-]?\d+(?:\.\d+)?
答案 1 :(得分:1)
使用polyethene的grep函数,你可以给它一个正则表达式字符串,它将返回所有匹配的分隔字符串。然后,您可以用字符串替换该数字的确切实例。在this thread(感谢HamZa DzCyberDeV),有一个解释为什么会这样。
(你需要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!