如何将字符串转换为正则表达式的字符串文字

时间:2012-01-26 22:21:10

标签: c# regex

我想通过动态构建模式来做一些regex.match。以下代码无效。我想知道如何将字符串“^ [ABCDEFG] [ABCDEFG] $”转换为@“^ [ABCDEFG] [ABCDEFG] $”并将其用于正则表达式。

由于

static string Convert(string s)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.Length; i++)
        {
            if (s[i].Equals('N'))
            {
                sb.Append("[ABCDEFG]");
            }
            else
            {
                sb.Append(s[i]);
            }
        }
        return sb.ToString();
    }



    static void Main(string[] args)
    {
        string seq = "CA";
        Regex re = new Regex(Convert("^NN$"));
        if (re.Match(seq).Success)
        {
            Console.WriteLine("match");
        }



        Console.ReadKey();
    }

4 个答案:

答案 0 :(得分:2)

您正在构建一个接受字符A-G的正则表达式,但您的输入字符串包含“U”。

答案 1 :(得分:2)

代码没有任何问题,它的工作正常。

它创建一个正则表达式,匹配A到G范围内的两个字符。

使用字符串“UA”时,它不会写入消息“匹配”。

如果您将字符串更改为例如“BA”,它将写入消息。

答案 2 :(得分:0)

字符串"^[ABCDEFG][ABCDEFG]$"@"^[ABCDEFG][ABCDEFG]$"相同,无法转换。

@只对C#编译器说以下字符串文字没有任何转义序列,并且应该\作为\,而不是转义序列的开头。

因此:

  • "Hello" == @"Hello"
  • "^[ABCDEFG][ABCDEFG]$" == @"^[ABCDEFG][ABCDEFG]$"

但:

  • "Foo \n"!= @"Foo \n"

,而

  • "Foo \\n" == @"Foo \n"

注意:您的代码没问题,应该按预期工作。

答案 3 :(得分:0)

一个逐字字符串(字符串 literal 前缀为@)只是一种sytactic糖,允许更简单的文件系统访问和正则表达式写入,因为在逐字符串中字符{{1}不被视为转义字符。这样,您不必编写\来匹配正则表达式中的字符串"\\\\\\.\\\\",而只需编写"\.\",因为它们的数量减少,因此计算反斜杠变得更容易,因此不容易出错。

以下示例将证明逐字字符串与普通字符串没有区别:

@"\\\.\\"