首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex自动提取文本

使用regex自动提取文本
EN

Stack Overflow用户
提问于 2017-12-26 19:45:32
回答 2查看 2.2K关注 0票数 4

我现在正在学习使用自动热键的regex,但不知道如何提取特定的字符串并保存到变量中?

我正在搜索的文本行:t NW CO NORWALK集线器NW 201- DS3 -WLFRCTAICM5-NW 02K16 DS3 lec-1 PSTN

我试图保存,NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 DS3 LEC

这是我的regex代码: NW\D\d.DS3.]

但是如何将它作为一个变量存储在自动热键中呢?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-27 11:55:51

您可以提供包含匹配数组的第三个参数:

代码语言:javascript
复制
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文档:

FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1]) UnquotedOutputVar Mode 1(默认): OutputVar是用于存储与整个模式匹配的部分的变量的未引号。如果找不到模式(即,如果函数返回0),则此变量和下面的所有数组元素都为空。如果捕获子模式在NeedleRegEx中存在,则它们的匹配存储在基名为OutputVar的伪阵中。例如,如果变量的名称匹配,匹配第一个子模式的子字符串将存储在Match1中,第二个将存储在Match2中,依此类推。这方面的例外是命名子模式:它们是按名称而不是数字存储的。例如,匹配命名子模式"(?P<Year>\d{4})"的子字符串将存储在MatchYear中。如果某个特定的子模式与任何内容不匹配(或者如果函数返回零),则相应的变量将为空。

票数 2
EN

Stack Overflow用户

发布于 2017-12-31 10:11:50

代码语言:javascript
复制
; 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47983063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档