C# 如何使用正则表达式在一个goup中获得2个字段?

C# 如何使用正则表达式在一个goup中获得2个字段?,c#,regex,string,C#,Regex,String,我在一个用正则表达式读取txt文件的应用程序上工作。txt文件是不同的,所以应用程序有一个带有映射表的数据库,我在其中存储正则表达式 文件中有以下两行: 脚本开始日期:2017年10月11日星期五 脚本开始时间:23:26:20.61 我需要一组的开始日期时间2017年10月11日星期五23:26:20.61。我如何用正则表达式将这些数据收集到一个组中?我可以在两个字段之间排除脚本开始时间:字符串吗?或者我可以分组收集这两个字段,然后以某种方式将它们连接到一个组中吗?尝试以下方法: stri

我在一个用正则表达式读取txt文件的应用程序上工作。txt文件是不同的,所以应用程序有一个带有映射表的数据库,我在其中存储正则表达式

文件中有以下两行:

脚本开始日期:2017年10月11日星期五 脚本开始时间:23:26:20.61

我需要一组的开始日期时间2017年10月11日星期五23:26:20.61。我如何用正则表达式将这些数据收集到一个组中?我可以在两个字段之间排除脚本开始时间:字符串吗?或者我可以分组收集这两个字段,然后以某种方式将它们连接到一个组中吗?

尝试以下方法:

  string fileContent = File.ReadAllText(@"path to txt file");
  Match match = Regex.Match(fileContent, @"Script Start Date: (.+)\nScript Start Time: (.+)");
  if (match.Success)
  {
    // Here I use Substring method, to cut out "Fri", as it's not necessary to parse to DateTime
    DateTime.TryParse(match.Groups[1].Value.Substring(4) + " " + match.Groups[2], out DateTime dt);
    Console.WriteLine(dt);
    Console.ReadKey();
  }
模式说明:脚本开始日期:。+\n脚本开始时间:。+:

首先,它查找单词Script Start Date:,然后它将所有内容捕获到第一个组中,直到行日期部分结束,然后它匹配换行符\n,然后再次匹配脚本开始时间:字面上,然后将行的其余部分捕获到第二个捕获组时间部分

然后我检查匹配是否成功,如果成功,则使用CAPTRUNG groups构造DateTime变量

编辑:

使用此模式脚本开始日期:\w++\n脚本开始时间:。+,这样您就可以连接两个组,并直接使用我添加的众所周知的格式\w+来匹配Fri、day,并且只捕获正确的日期部分。
然后直接使用第一个和第二个捕获组来确定日期。

我会选择一种子字符串方法,它更容易调试,但要确保长度不会改变

    var inputTxt = "Script Start Date: Fri 11/10/2017 \n Script Start Time: 23:26:20.61";
    var firstCondition = "Start Date: ";
    var dateIndex = inputTxt.IndexOf(firstCondition) + firstCondition.Length;

    var secondCondition = "Start Time: ";
    var timeIndex = inputTxt.IndexOf(secondCondition) + secondCondition.Length;
    //gets format count (no need to change)
    var dl = "Fri 11/10/2017";
    var tl = "23:26:20.61";
    //result
    var date = inputTxt.Substring(dateIndex, dl.Length) + " " + inputTxt.Substring(timeIndex, tl.Length);

谢谢,但我的应用程序会遍历映射表,只调用正则表达式。我可以只使用一个正则表达式而不使用任何C代码吗?@Atesz为什么不需要任何C代码?你需要至少使用一行,为什么不多用几行来保证安全呢?因为这是一个通用的应用程序,它只是txt文件的一种类型,其他人有正常的datetime字段,核心代码与其他人一起工作,因此首先我尝试创建一个正则表达式,它可以在一个组中收集这两个字段,如果我不能,那么我将修改我的代码,但我更喜欢为此创建一个好的正则表达式。@Atesz这是一个好的正则表达式,您要求的正则表达式是不可能实现的。我怀疑你能否把两篇独立的文章分成一组。您没有给出任何需要使用一行代码的理由这是一个可怕的想法,因为它降低了可伸缩性,代码的可维护性和可读性。唯一的原因是,我的工作是尝试创建一个正则表达式,我们可以将其存储在数据库中,并在迭代正则表达式时从中读取,而不修改项目。不是我的主意:D