如何使用正则表达式识别特定行? 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*
- 零个或多个空白字符
(?<folder>.*)
- 组“文件夹”:尽可能多的任意零个或多个字符
\\
- 一个 \
字符
(?<filename>.*\.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#的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式删除含有特定字符的行,不同的特定字符,并且有很多行