Autohotkey使用正则表达式提取文本

时间:2017-12-26 19:45:32

标签: regex string variables match autohotkey

我刚刚使用autohotkey学习正则表达式,但无法弄清楚如何提取特定字符串并保存到变量?

我正在搜索的文字行:     T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN

我正在努力保存 NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC]

这是我的正则表达式代码: NW \ d \ d。 DS3。

但是如何将其存储为autohotkey中的变量?

我尝试过RegexMatch,但只显示了位置。我做错了什么。

2 个答案:

答案 0 :(得分:1)

您可以提供将保存匹配数组的第三个参数:

RegExMatch(str,"NW\D\d.*DS3.*\]",matches)

然后,matches[0]将包含匹配。

如果在模式中使用捕获组,则可以使用其他索引访问其值。如果您对"NW\D(\d.*DS3.*)\]"使用"NW 5xxx DS3 yyy],则matches[0]内的整个字符串将会matches[1] 5xxx DS3 yyy

参见AHK RegExMatch docs:

  

FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])   

  UnquotedOutputVar   模式1(默认值): OutputVar 是变量的不带引号的名称,用于存储与整个模式匹配的 Haystack 部分。如果未找到模式(即,如果函数返回0),则此变量和下面的所有数组元素都将变为空白。   

  如果 NeedleRegEx 中存在任何capturing subpatterns,则其匹配项将存储在pseudo-array中,其基本名称为 OutputVar 。例如,如果变量的名称是匹配,则与第一个子模式匹配的子字符串将存储在 Match1 中,第二个将存储在中Match2 ,依此类推。例外情况是named subpatterns:它们按名称而不是数字存储。例如,与命名子模式"(?P<Year>\d{4})"匹配的子字符串将存储在 MatchYear 中。如果特定子模式与任何内容都不匹配(或者函数返回零),则相应的变量将变为空白。

答案 1 :(得分:1)

; If you want to delete ALL ....

Only(ByRef C)
{

/*
RegExReplace
https://autohotkey.com/docs/commands/RegExReplace.htm
*/

; NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] 

C:=RegExReplace(C, "NW\s[\w-]+\s\[[\w\s]+\]","",ReplacementCount,-1) 

if (ReplacementCount = 0)
return C
else
return Only(C)

} ; Only(ByRef C)

string:="Line of text I am searching: T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN"

Result:=Only(string)
MsgBox, % Result
MsgBox, % Only(string)