使用 AHK 正则表达式匹配提取子字符串
Extract a substring using AHK regex matching
我找不到这个问题的答案。不举个例子很难问清楚。
我有文件名。这是一个示例格式:
Diagnostics 20200826-12345moretext.zip
如您所见,日期在文件名的某个位置内置到文件名中。我想匹配“2020XXZZ”,但我想将 XX 存储到一个变量中。 RegExMatch 可以吗?
类似于regexmatch(file_name, "202[0-9]{3}", out_var)
如果不可能,我想我可以从 out_var
中提取最后一个字符,但我希望有正确的方法来做到这一点(如果存在,我认为有办法)。
是的,这非常可行。
使用捕获组 (AHK documentation | General Regex tutorial).
会很容易
所以我们可以使用像这样简单的 Regex 2020(\d{2})
。
如果您希望文件名是可能导致匹配错误的东西,您可以向 Regex 添加更多检查。
当我们在 AHK 中使用此正则表达式时,我们将要以 O)
(see OutputVar Mode 3) to indicate we're outputting a match object.
开始模式
然后我们可以访问第一个捕获的组,例如 out_var.Value(1)
或 out_var[1]
.
file := "Diagnostics 20200826-12345moretext.zip"
if(RegExMatch(file, "O)2020(\d{2})", out_var))
MsgBox, % "First two numbers after ""2020"": " out_var[1]
else
MsgBox, % "Failed to match!"
或者,如果不使用捕获组,您可以使用环视来仅匹配您想要的两个数字。在这种情况下,您也不会输出匹配对象。
就我个人而言,捕获组将是 better/more 常用方法,它们绝对值得学习,但如果您有兴趣,这里也有一个环顾四周:(?<=2020)\d{2}
.
file := "Diagnostics 20200826-12345moretext.zip"
if(RegExMatch(file, "(?<=2020)\d{2}", out_var))
MsgBox, % "First two numbers after ""2020"": " out_var
else
MsgBox, % "Failed to match!"
我找不到这个问题的答案。不举个例子很难问清楚。
我有文件名。这是一个示例格式:
Diagnostics 20200826-12345moretext.zip
如您所见,日期在文件名的某个位置内置到文件名中。我想匹配“2020XXZZ”,但我想将 XX 存储到一个变量中。 RegExMatch 可以吗?
类似于regexmatch(file_name, "202[0-9]{3}", out_var)
如果不可能,我想我可以从 out_var
中提取最后一个字符,但我希望有正确的方法来做到这一点(如果存在,我认为有办法)。
是的,这非常可行。
使用捕获组 (AHK documentation | General Regex tutorial).
所以我们可以使用像这样简单的 Regex 2020(\d{2})
。
如果您希望文件名是可能导致匹配错误的东西,您可以向 Regex 添加更多检查。
当我们在 AHK 中使用此正则表达式时,我们将要以 O)
(see OutputVar Mode 3) to indicate we're outputting a match object.
开始模式
然后我们可以访问第一个捕获的组,例如 out_var.Value(1)
或 out_var[1]
.
file := "Diagnostics 20200826-12345moretext.zip"
if(RegExMatch(file, "O)2020(\d{2})", out_var))
MsgBox, % "First two numbers after ""2020"": " out_var[1]
else
MsgBox, % "Failed to match!"
或者,如果不使用捕获组,您可以使用环视来仅匹配您想要的两个数字。在这种情况下,您也不会输出匹配对象。
就我个人而言,捕获组将是 better/more 常用方法,它们绝对值得学习,但如果您有兴趣,这里也有一个环顾四周:(?<=2020)\d{2}
.
file := "Diagnostics 20200826-12345moretext.zip"
if(RegExMatch(file, "(?<=2020)\d{2}", out_var))
MsgBox, % "First two numbers after ""2020"": " out_var
else
MsgBox, % "Failed to match!"