Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何忽略组_C#_Regex - Fatal编程技术网

C# 如何忽略组

C# 如何忽略组,c#,regex,C#,Regex,我在streamreader中检索到以下节点。其中可能有很多。我只对检索该节点中的几个组感兴趣,例如REPLICATE\u ID、ASSAY\u NUMBER、少量日期字段 节点中字段的顺序可能不同,有时也会出现新字段,但我要提取的字段不会改变 到目前为止,我拥有的正则表达式与整个节点匹配,因此如果节点有新字段或顺序不同,它将中断。是否可以匹配我只感兴趣的组 TEST_REPLICATE { REPLICATE_ID 453w

我在streamreader中检索到以下节点。其中可能有很多。我只对检索该节点中的几个组感兴趣,例如
REPLICATE\u ID、ASSAY\u NUMBER、少量日期字段

节点中字段的顺序可能不同,有时也会出现新字段,但我要提取的字段不会改变

到目前为止,我拥有的正则表达式与整个节点匹配,因此如果节点有新字段或顺序不同,它将中断。是否可以匹配我只感兴趣的组

   TEST_REPLICATE
    {
        REPLICATE_ID            453w
        ASSAY_NUMBER            334
        ASSAY_VERSION           4
        ASSAY_STATUS            test
        DILUTION_ID         1
        SAMPLE_ID           "NC_dede"
        SAMPLE_TYPE         Specimen
        TEST_ORDER_DATE         05.23.2012
        TEST_ORDER_TIME         04:25:07
        TEST_INITIATION_DATE        05.23.2012
        TEST_INITIATION_TIME        05:19:43
        TEST_COMPLETION_DATE        05.23.2012
        TEST_COMPLETION_TIME        05:48:01
        ASSAY_CALIBRATION_DATE      NA
        ASSAY_CALIBRATION_TIME      NA
        TRACK           1
        PROCESSING_LANE     1
        MODULE_SN       "EP004"
        LOAD_LIST_NAME          C:\BwedwQwedw_SCC\edwLoadlist2RACKSB.json
        OPERATOR_ID         "Q_dwe"
        DARK_SUBREADS           16 23 19 20 16 18 21 16 17 18 19 19 20 22 19 20 19 20 18 20 17 20 21 16 19 23 20 22 19 20
        SIGNAL_SUBREADS         18 17 20 21 42 61 41 31 30 30 26 26 25 22 24        DARK_COUNT          577
        SIGNAL_COUNT            781
        CORRECTED_COUNT         204
        STD_BAK             1.95965044971226
        AVG_BAK             19.2333333333333
        STD_FOR             8.67212471810898
        AVG_FOR             26.0333333333333
        SHAPE               NA
        EXCEPTION_STRING        TestException - Parameters:Unable to process test, background read failure.
        RESULT              NA
        REPORTED_RESULT         NA
        REPORTED_RESULT_UNITS       NA
        REAGENT_MASTER_LOT      13600LI02
        REAGENT_SERIAL_NUMBER       25022
        RESULT_FLAGS            RUO
        RESULT_INTERPRETATION       NA
        DILUTION_PROTOCOL       UNDILUTED
        RESULT_COMMENT          frer 1 LANE A
        DATA_MANAGEMENT_FIELD_1     NA
        DATA_MANAGEMENT_FIELD_2     NA
        DATA_MANAGEMENT_FIELD_3     NA
        DATA_MANAGEMENT_FIELD_4     NA
    }

    string pat = @"TEST_REPLICATE\s*{\s*REPLICATE_ID\s*([^}]*?)\s+ASSAY_NUMBER\s*([^}]*?)\s+ASSAY_VERSION\s*([^}]*?)\s+DILUTION_ID\s*([^}]*?)\s+SAMPLE_ID\s*([^}]*?)\s+SAMPLE_TYPE\s*([^}]*?)\s+TEST_ORDER_DATE\s*([^}]*?)\s+TEST_ORDER_TIME\s*([^}]*?)\s+TEST_INITIATION_DATE\s*([^}]*?)\s+TEST_INITIATION_TIME\s*([^}]*?)\s+TEST_COMPLETION_DATE\s*([^}]*?)\s+TEST_COMPLETION_TIME\s*([^}]*?)\s+ASSAY_CALIBRATION_DATE\s*([^}]*?)\s+ASSAY_CALIBRATION_TIME\s*([^}]*?)\s+TRACK\s*([^}]*?)\s+PROCESSING_LANE\s*([^}]*?)\s+MODULE_SN\s*([^}]*?)\s+LOAD_LIST_NAME\s*([^}]*?)\s+OPERATOR_ID\s*([^}]*?)\s+DARK_SUBREADS\s*([^}]*?)\s+SIGNAL_SUBREADS\s*([^}]*?)\s+DARK_COUNT\s*([^}]*?)\s+SIGNAL_COUNT\s*([^}]*?)\s+CORRECTED_COUNT\s*([^}]*?)\s+STD_BAK\s*([^}]*?)\s+AVG_BAK\s*([^}]*?)\s+STD_FOR\s*([^}]*?)\s+AVG_FOR\s*([^}]*?)\s+SHAPE\s*([^}]*?)\s+EXCEPTION_STRING\s*([^}]*?)\s+RESULT\s*([^}]*?)\s+REPORTED_RESULT\s*([^}]*?)\s+REPORTED_RESULT_UNITS\s*([^}]*?)\s+REAGENT_MASTER_LOT\s*([^}]*?)\s+REAGENT_SERIAL_NUMBER\s*([^}]*?)\s+RESULT_FLAGS\s*([^}]*?)\s+RESULT_INTERPRETATION\s*([^}]*?)\s+DILUTION_PROTOCOL\s*([^}]*?)\s+RESULT_COMMENT\s*([^}]*?)\s+DATA_MANAGEMENT_FIELD_1\s*([^}]*?)\s+DATA_MANAGEMENT_FIELD_2\s*([^}]*?)\s+DATA_MANAGEMENT_FIELD_3\s*([^}]*?)\s+DATA_MANAGEMENT_FIELD_4\s*([^}]*?)\s*}";   

是的,您可能应该解析记录中的键值对

如果要从记录中提取键值对,下面是一个代码示例。
找到匹配项后,您要查找的密钥可以与捕获集合中的密钥进行测试

您还可以更改regex,以了解如何允许记录的开始/结束。
但不要改变核心,它可以防止灾难性的回溯

正则表达式替代方案:

# Record starts on a new line, closing brace can be anywhere

^ [^\S\n]*TEST_REPLICATE\s*\{
 (?>
      \s* (?<key> [^\s{}]+ ) [^\S\n]* (?<val> [^\n{}]*? ) [^\S\n]* (?:$|(?=\}))
 )*
 \s*\}


# Record starts anywhere, closing brace is on a new line 

TEST_REPLICATE\s*\{
 (?>
      \s* (?<key> [^\s{}]+ ) [^\S\n]* (?<val> [^\n{}]*? ) [^\S\n]* $
 )*
 \s*\}
#记录从新行开始,右括号可以在任何地方
^[^\S\n]*测试\u复制\S*\{
(?>
\s*(?[^\s{}]+)[^\s\n]*(?[^\n{}]*?)[^\s\n]*(?:$|(?=\}))
)*
\s*\}
#记录从任何地方开始,右大括号位于新行
测试\u复制\s*\{
(?>
\s*(?[^\s{}]+)[^\s\n]*(?[^\n{}]*?)[^\s\n]*$
)*
\s*\}
C#测试代码:

Regex testRx = new Regex(
 @"
  ^ [^\S\n]* TEST_REPLICATE     # Record, starts on a newline
    \s*                         # Optional whitespaces (trims blank lines)
    \{                          # Record opening brace
      (?>                           # Atomic group
         \s*                           # Optional many whitespace (trims blank lines)
         # Line in record to be recorded
         (?<key> [^\s{}]+)                # required <key>, not whitespacs nor braces
         [^\S\n]*                         # trim whitespaces (don't include newline)
         (?<val> [^\n{}]*?)               # optional <value>, not newlines nor braces
         [^\S\n]*                         # trim whitespaces (don't include newline)
         (?:$|(?=\}))                   # End of line, or next char is a closing brace
      )*                            # End atomic group, do many times (optional)
    \s*                         # Optional whitespaces (trims blank lines)
  \}                            # Record closing brace
 ", RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);

string testdata = @"
 TEST_REPLICATE{}
 TEST_REPLICATE{
     REPLICATE_ID            1asdf985
     ASSAY_NUMBER            123sdg
     ASSAY_VERSION           4sdgn
     ASSAY_TYPE            unknown
 }

 TEST_REPLICATE
 {
     REPLICATE_ID            
     ASSAY_NUMBER            123    
     ASSAY_VERSION           4   
     ASSAY_TYPE            unknown   
     DILUTION_ID         1
     SAMPLE_ID           ""NC_HIV1""
     SAMPLE_TYPE         Specimen
     TEST_ORDER_DATE         05.21.2012
     TEST_ORDER_TIME         03:44:01
     TEST_INITIATION_DATE        05.21.2012
     TEST_INITIATION_TIME        04:03:36

 TEST_COMPLETION_DATE        05.21.2012
 TEST_COMPLETION_TIME        04:29:32
     ASSAY_CALIBRATION_DATE              NA
     ASSAY_CALIBRATION_TIME      NA
     TRACK           1
     PROCESSING_LANE     1
     MODULE_SN       ""EP004""
     LOAD_LIST_NAME          C:\sdddd
     OPERATOR_ID         ""Q_SI""
     DARK_SUBREADS           NA
     SIGNAL_SUBREADS         NA
     DARK_COUNT          NA
     SIGNAL_COUNT            NA
     CORRECTED_COUNT         NA
     STD_BAK             NA
     AVG_BAK             NA
     STD_FOR             NA
     AVG_FOR             NA
     SHAPE               NA
     EXCEPTION_STRING        Test execution was stopped.
     RESULT              NA
     REPORTED_RESULT         NA
     REPORTED_RESULT_UNITS       NA
     REAGENT_MASTER_LOT      2345
     REAGENT_SERIAL_NUMBER       25022
     RESULT_FLAGS            NA
     RESULT_INTERPRETATION       NA
     DILUTION_PROTOCOL       UNDILUTED
     RESULT_COMMENT          HIV NC 1
     DATA_MANAGEMENT_FIELD_1     NA
     DATA_MANAGEMENT_FIELD_2     NA
     DATA_MANAGEMENT_FIELD_3     NA
     DATA_MANAGEMENT_FIELD_4     NA
 }
    ";

Match m_testrec = testRx.Match(testdata);

// Each match contains a single record
//
while (m_testrec.Success)
{
    Console.WriteLine("New Record\n------------------------");

    CaptureCollection cc_key = m_testrec.Groups["key"].Captures;
    CaptureCollection cc_val = m_testrec.Groups["val"].Captures;

    for (int i = 0; i < cc_key.Count; i++)
    {
        Console.WriteLine("'{0}' = '{1}'", cc_key[i].Value, cc_val[i].Value);                                                                                                 
        // 
        // Test specific keys here
        //  if (cc_key[i].Value == "REAGENT_SERIAL_NUMBER") ...

    }
    Console.WriteLine("------------------------");

    // Get next record
    m_testrec = m_testrec.NextMatch();
} 
Regex testRx=新的Regex(
@"
^[^\S\n]*测试复制记录,从换行开始
\s*#可选空白(修剪空白行)
\{#记录开场白
(?>#原子群
\s*#可选多个空格(修剪空行)
#要记录的记录中的行
(?[^\s{}]+)#必填项,不是空格或大括号
[^\S\n]*#修剪空白(不包括换行符)
(?[^\n{}]*?)#可选,不是换行符或大括号
[^\S\n]*#修剪空白(不包括换行符)
(?:$|(?=\}))#行尾,或者下一个字符是右大括号
)*#结束原子组,执行多次(可选)
\s*#可选空白(修剪空白行)
\}#记录收尾大括号
“,RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
字符串testdata=@”
测试_复制{}
测试复制{
复制ID 1asdf985
化验单编号123sdg
化验单版本4sdgn
分析类型未知
}
测试复制
{
复制ID
化验单编号123
第4版
分析类型未知
稀释度1
样本ID“NC\U HIV1”
样本类型样本
测试订单日期2012年5月21日
测试顺序时间03:44:01
试验开始日期2012年5月21日
测试开始时间04:03:36
测试完成日期2012年5月21日
测试完成时间04:29:32
化验\校准\日期NA
分析\校准\时间NA
轨道1
加工区1巷
模块编号“EP004”
加载\u列表\u名称C:\sdddd
操作员ID“Q\U SI”
黑_子读物
信号_子读入NA
乌纳伯爵
信号计数
更正的计数不适用
STD_BAK NA
平均值
NA标准
NA的平均值
形状NA
异常\u字符串测试执行已停止。
结果NA
报告结果a
报告的结果单位不适用
试剂\u主试剂\u批次2345
试剂编号25022
结果(a)
结果(a)
稀释法未稀释
结果1
数据\u管理\u字段\u 1 NA
数据\u管理\u字段\u 2 NA
数据\u管理\u字段\u 3 NA
数据\u管理\u字段\u 4 NA
}
";
Match m_testrec=testRx.Match(testdata);
//每个匹配都包含一条记录
//
while(m_testrec.Success)
{
Console.WriteLine(“新记录\n----------------------”;
CaptureCollection cc_key=m_testrec.Groups[“key”]。捕获;
CaptureCollection cc_val=m_testrec.Groups[“val”]。捕获;
对于(int i=0;i
停止这种疯狂行为,正确解析结构即可。一行有一个键/名称,后跟空格和一个值(行的其余部分)。迭代这些行并将其全部解析到哈希/字典中,或者保存您需要的任何内容。