如何使用正则表达式识别特定行? C#

Posted

技术标签:

【中文标题】如何使用正则表达式识别特定行? C#【英文标题】:How to use Regex to identify specific line? c# 【发布时间】:2021-05-18 08:34:05 【问题描述】:

我是正则表达式的新手,仍然不太了解它

我需要识别一行,但由于某种原因,我在使用正则表达式时总是出错

识别结构的行:屏幕消息:FULL PATH \ FILENAME.PNG

示例:

Screen Message: c:\program files (x86)\regression machine work\reports\156487/04-37-71_47-38-141\Screenmessages\63445646476476767574.FAR.png

尝试使用前缀 ("Screen Message: ") 和后缀 (".FAR.png") 但无法让它工作

Regex.Match(Text, $"(^Screen Message: )+[0-9]+[a-z]\+.FAR.png$", RegexOptions.IgnoreCase).Success;

任何帮助将不胜感激 谢谢

【问题讨论】:

我不确定您到底需要检查什么。你的解释和代码不够清楚,我有几个问题,例如,你为什么要在你的正则表达式中转义+ 这个怎么样? (^Screen Message: )+(.+)\/([^\/]+)(\w+\.FAR\.png) 你只想要比赛的成功吗?不需要任何子字符串?你有一些否定匹配的例子吗?与这一行相似但不应匹配的行? 如果我的回答不能帮助您解决问题,请考虑更新问题。 【参考方案1】:

你可以使用像这样的正则表达式

Screen Message:\s*(?<folder>.*)\\(?<filename>.*\.FAR\.png)

请参阅regex demo。 详情

Screen Message: - 一个字符串 \s* - 零个或多个空白字符 (?&lt;folder&gt;.*) - 组“文件夹”:尽可能多的任意零个或多个字符 \\ - 一个 \ 字符 (?&lt;filename&gt;.*\.FAR\.png) - 组“文件名”:尽可能多的任意零个或多个字符,然后是 .FAR.png 子字符串

见C# demo:

var pattern = @"Screen Message:\s*(?<folder>.*)\\(?<filename>.*\.FAR\.png)";
var input = @"Screen Message: c:\program files (x86)\regression machine work\reports\156487/04-37-71_47-38-141\Screenmessages\63445646476476767574.FAR.png";
var match = Regex.Match(input, pattern);
if (match.Success)

    Console.WriteLine("Folder: '0', filename: '1'", 
        match.Groups["folder"].Value, match.Groups["filename"].Value);

【讨论】:

以上是关于如何使用正则表达式识别特定行? C#的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式怎么识别特定的中文字符

正则表达式删除含有特定字符的行,不同的特定字符,并且有很多行

使用正则表达式(.net 和 C#)识别行尾

如何使用正则表达式仅捕获具有特定格式的有效句子的第一个单词? [复制]

带有几行包含“#”和特定文本的正则表达式

没有特定单词的行匹配的正则表达式