0

我正在尝试查找一些写入以“K.TIF”结尾的日志文件的文件名。

我试图找到:

20130629VGM180ZZ001001K.TIF 
20130629VGM180ZZ001002K.TIF

等等

由于我的正则表达式很糟糕,我尝试了这个:

Regex.Match(line, @"([A-Z0-9]+){23}\.TIF", RegexOptions.IgnoreCase);
Regex.Match(line, @"(?<=\\)(.>)(?=K\.TIF){23}", RegexOptions.IgnoreCase);

第一个很糟糕,不执行并给出糟糕的结果。

如果我将 K\ 更改为 Z,第二个实际上给出了以 Z.TIF 结尾的所有 TIF。但是,它没有找到任何具有当前正则表达式的 K.TIF。

4

5 回答 5

1

这似乎对我有用:

^.*\\(\w*K.TIF)$

它搜索最后一个斜杠,然后捕获后面跟着的单词 characters K.TIF。示例:http ://www.regex101.com/r/nH6gV4

于 2013-07-26T12:28:34.087 回答
1

这应该有效:

@"\w+K\.TIF$"
于 2013-07-26T12:29:20.647 回答
0

这个正则表达式会得到你想要的:

\\([A-Z0-9]{22}K\.TIF)$

您不应该使用IgnoreCase您专门制作的正则表达式来匹配大写字母。

提取值将在匹配组内,因此请使用:

string MatchedFileName = Regex.Match(line, @"[A-Z0-9]{22}K\.TIF$").Value;

(更新,感谢泰勒指出我没有正确阅读 OP 的问题)

(再次更新,因为它不需要在开始或捕获组的反斜杠)

于 2013-07-26T12:28:03.883 回答
0

第一个正则表达式非常接近答案,但它有一个额外的“+”。我认为您可以尝试以下代码。

Regex.Match(line, @"([A-Z0-9]){22}K\.TIF", RegexOptions.IgnoreCase);
于 2013-07-26T12:31:05.590 回答
0

使用这个正则表达式var res = Regex.Match(line, @"(?im)^.+k\.tif$";

于 2013-07-26T12:38:24.300 回答