我需要从字符串中获取一些信息,并且我想使用组名来获取信息,但是我无法获得正确的结果。
我的密码
Regex _Regex = new Regex(@"\AFilePath: (?<FilePath>.+), ContentType: (?<ContentType>.+)[, PrinterName: ]? (?<PrinterName>.+),DownloadFileName: (?<DownloadFileName>.+)\z");
string _String = @"FilePath: C:\Download\TEST.docx, ContentType: WORD, PrinterName: RICOH Aficio MP C4501 PCL 6, DownloadFileName: TEST.docx";
Match _Match = _Regex.Match(_String);
if (_Match.Success == true)
{
string FileNme = _Match.Groups["FilePath"].Value;
string ContentType = _Match.Groups["ContentType"].Value;
string PrinterName = _Match.Groups["PrinterName"].Value;
string DownloadFileName = _Match.Groups["DownloadFileName"].Value;
}
我希望我可以通过Regex获取FileNme,CreateTime,PrinterName,DownloadFileName信息,如下所示:
FileNme = "C:\Download\TEST.docx"
ContentType = "WORD"
PrinterName = "RICOH Aficio MP C4501 PCL 6"
DownloadFileName = "TEST.docx"
但是实际上,这个正则表达式的结果是这样的
FileNme = "C:\Download\TEST.docx"
ContentType = "WORD, PrinterName: RICOH Aficio MP C4501 PCL"
PrinterName = "6"
DownloadFileName = "TEST.docx"
最佳答案
您可以使用
\AFilePath:\s*(?<FilePath>.*?),\s*ContentType:\s*(?<ContentType>.*?),\s*PrinterName:\s*(?<PrinterName>.*?),\s*DownloadFileName:\s*(?<DownloadFileName>.+)\z
请参见regex demo
基本上,正则表达式的所有部分都代表一些硬编码的字符串(例如
FilePath:
),然后是0+个空格(与\s*
匹配),然后是一个命名捕获组(例如(?<FilePath>.*?)
),该捕获组捕获除a以外的任何0+个字符。换行,请尽可能少地使用(而不是最后一个需要贪婪的点图案的.+
或.*
)。如果可能缺少打印机名称部分,则需要用
,\s*PrinterName:\s*(?<PrinterName>.*?)
包围(?:...)?
,即(?:,\s*PrinterName:\s*(?<PrinterName>.*?))?
。