问题描述
我无法找到此问题的解决方案。很难给出正确的答案而没有给出示例。
我有文件名。这是一个示例格式:
Diagnostics 20200826-12345moretext.zip
如您所见,日期在文件名中的某个位置内置在文件名中。我想匹配“ 2020XXZZ”,但我想将XX存储到变量中。 RegExMatch有可能吗?
类似regexmatch(file_name,"202[0-9]{3}",out_var)
如果不可能的话,我想我可以从out_var
中提取最后一个字符,但是我希望找到正确的方法(如果存在,我认为有办法)。
解决方法
是的,这非常可行。
捕获组(AHK documentation | General Regex tutorial)很容易。
因此,我们可以使用像2020(\d{2})
这样简单的正则表达式。
如果希望文件名是可能导致匹配错误内容的文件,则可以在正则表达式中添加更多检查。
当我们在AHK中使用此Regex时,我们将要以O)
(请参见OutputVar模式3)开始模式,以指示我们正在输出{{ 3}}。
然后,我们可以使用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!"
或者,要不使用捕获组,可以使用环顾四周方法仅匹配所需的两个数字。在这种情况下,您也不会输出匹配对象。
我个人说捕获组将是更好/更常见的方法,并且它们肯定是很好学习的,但是如果您有兴趣,这里也提供了环顾四周的方法:match object。
file := "Diagnostics 20200826-12345moretext.zip"
if(RegExMatch(file,"(?<=2020)\d{2}",% "First two numbers after ""2020"": " out_var
else
MsgBox,% "Failed to match!"