Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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,我有一行XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD 我需要一个正则表达式 如果我在我的行中发现A01、A02、A03或A11、A12、A13、A14,我必须用“AA”替换 如果我发现B11、B12、B13,我必须用“BB”替换 我试过使用 if (Regex.IsMatch(Value, "^A0[2-9]")|| Regex.IsMatch(Value, "^A1[0-5]")) 它不起作用——所以基本上如果我有A02,A03,A0

我有一行XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD

我需要一个正则表达式

  • 如果我在我的行中发现A01、A02、A03或A11、A12、A13、A14,我必须用“AA”替换
  • 如果我发现B11、B12、B13,我必须用“BB”替换
  • 我试过使用

    if (Regex.IsMatch(Value, "^A0[2-9]")|| Regex.IsMatch(Value, "^A1[0-5]"))
    

    它不起作用——所以基本上如果我有A02,A03,A04,A05,A06,A07或A10,A11,A12。。。。。。。A15,我必须替换为“AA”

    您必须从表达式中删除
    ^
    ,如
    A0[2-9]
    。因为结果不在表达式(^)的开头

    描述
    (?:(?:[AB](?=0[2-9]| 1[0-5]))[0-9]{2}((?=,\s*\1),|)*
    
    替换为:
    $1$1

    此正则表达式将执行以下操作:

    • 查找
      A02
      -
      A15
      B02
      -
      B15
    • 将整个运行替换为
      AA
      BB
    例子 现场演示

    示例文本

    XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD
    
    样本匹配

    XX、VV、A01、AA、BB、ZZ、DD
    
    解释
    节点说明
    ----------------------------------------------------------------------
    (?:组,但不捕获(0次或更多次)
    (匹配尽可能多的金额):
    ----------------------------------------------------------------------
    (组和捕获到\1:
    ----------------------------------------------------------------------
    (?:组,但不捕获:
    ----------------------------------------------------------------------
    [AB]任何字符:“A”、“B”
    ----------------------------------------------------------------------
    (?=向前看,看看是否有:
    ----------------------------------------------------------------------
    0                        '0'
    ----------------------------------------------------------------------
    [2-9]任何“2”到“9”的字符
    ----------------------------------------------------------------------
    |或
    ----------------------------------------------------------------------
    1                        '1'
    ----------------------------------------------------------------------
    [0-5]任何“0”到“5”的字符
    ----------------------------------------------------------------------
    )展望的结束
    ----------------------------------------------------------------------
    )分组结束
    ----------------------------------------------------------------------
    )结束\1
    ----------------------------------------------------------------------
    [0-9]{2}“0”到“9”的任何字符(2次)
    ----------------------------------------------------------------------
    (?:组,但不捕获:
    ----------------------------------------------------------------------
    (?=向前看,看看是否有:
    ----------------------------------------------------------------------
    ,                        ','
    ----------------------------------------------------------------------
    \s*空格(\n、\r、\t、\f和“”)
    (0次或更多次(匹配最大
    (可能的金额)
    ----------------------------------------------------------------------
    \1与捕获匹配的内容\1
    ----------------------------------------------------------------------
    )展望的结束
    ----------------------------------------------------------------------
    ,                        ','
    ----------------------------------------------------------------------
    |或
    ----------------------------------------------------------------------
    )分组结束
    ----------------------------------------------------------------------
    )*分组结束
    ----------------------------------------------------------------------
    
    从给定的输入字符串
    XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD
    ,您想要的输出字符串应该是什么样子?您好。你能不能给一个正则表达式来代替a而不是B的XX,VV,A02,A03,A11,A12,A13,A14,ZZ,DD,用XX,VV,AA,ZZ,DD代替其中的一些,上面写着无法识别的转义序列。Thanks@Kathy对于给定的字符串,
    XX,VV,A01,A02,A03,A11,A12,A13,A14,ZZ,DD
    所需的字符串是什么样子的?我希望这个XX,VV,AA,ZZ,DD来自XX,VV,A02,A03,A11,A12,A13,A14,ZZ,DD对regex来说是如此陌生。请帮忙!所以你的整个问题有点让人困惑,但是
    (?:((?:[AB](?=[0-9]{2}))[0-9]{2}(?:(?=,\s*\2),|)*
    这个正则表达式将把你的示例字符串转换成
    XX,VV,AA,ZZ,DD
    。当然,如果您输入的字符串还包含
    B01、B02…
    ,那么它也将替换这些字符串。要限制此行为,只需将
    [AB]
    部分中的字母更改为您希望匹配的字母即可。另请参见,非常感谢您的回复。但这是将整个样本输入替换为AA,而将其他样本排除在外。我不希望这样,它应该只替换A,保持其他的不变。
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Text.RegularExpressions;
    
    public static class Sample1
    {
        public static void Main()
        {
            var sampleInput = "XX,VV,A01,A02,A03,A11,A12,A13,A14,B11,B12,B13,ZZ,DD";
            var results = Regex.Replace(sampleInput, "A0[2-9]|A1[0-5]", "AA");
            Console.WriteLine("Line: {0}", results);
        }
    }