我需要从字符串中获取一些信息,并且我想使用组名来获取信息,但是我无法获得正确的结果。

我的密码

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

c# - 如何匹配正确的组名(.NET C#正则表达式)-LMLPHP

基本上,正则表达式的所有部分都代表一些硬编码的字符串(例如FilePath:),然后是0+个空格(与\s*匹配),然后是一个命名捕获组(例如(?<FilePath>.*?)),该捕获组捕获除a以外的任何0+个字符。换行,请尽可能少地使用(而不是最后一个需要贪婪的点图案的.+.*)。

如果可能缺少打印机名称部分,则需要用,\s*PrinterName:\s*(?<PrinterName>.*?)包围(?:...)?,即(?:,\s*PrinterName:\s*(?<PrinterName>.*?))?

08-07 01:21