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
C# 如何将正则表达式的字符串转换为字符串文字_C#_Regex - Fatal编程技术网

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

C# 如何将正则表达式的字符串转换为字符串文字,c#,regex,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++) {

我想通过动态构建模式来进行一些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();
    }
静态字符串转换(字符串s)
{
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
您正在构建一个接受字符a-G的正则表达式,但您的输入字符串包含一个“U”。

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

代码没有问题,它工作正常

它创建一个正则表达式,该正则表达式匹配范围a到G中的两个字符

对于字符串“UA”,它不会写入消息“match”


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

代码没有问题,工作正常

它创建一个正则表达式,该正则表达式匹配范围a到G中的两个字符

对于字符串“UA”,它不会写入消息“match”

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

字符串
“^[ABCDEFG][ABCDEFG]$”
@“^[ABCDEFG][ABCDEFG]$”
相同,没有可转换的内容

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

因此:

  • “你好”
    ==
    @“你好”
  • “^[ABCDEFG][ABCDEFG]$”
    ==
    @“^[ABCDEFG][ABCDEFG]$”
但是:

  • “Foo\n”
    !=<代码>@“Foo\n”

  • “Foo\\n”
    =
    @“Foo\n”
注意:您的代码没有问题,应该可以正常工作。

字符串
“^[ABCDEFG][ABCDEFG]$”
@“^[ABCDEFG][ABCDEFG]$”
完全相同,没有任何可转换的内容

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

因此:

  • “你好”
    ==
    @“你好”
  • “^[ABCDEFG][ABCDEFG]$”
    ==
    @“^[ABCDEFG][ABCDEFG]$”
但是:

  • “Foo\n”
    !=<代码>@“Foo\n”

  • “Foo\\n”
    =
    @“Foo\n”
注意:您的代码没有问题,应该可以按预期工作。

逐字字符串(字符串文字前缀为
@
)只是为了允许更简单的文件系统访问和正则表达式编写,因为在逐字字符串中,
\
字符不被视为转义字符。这样,您就不必编写
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>来匹配正则表达式中的字符串
,而只需编写
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

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

public class Program
{
    public string GetString(bool verbatim)
    {
        if(verbatim)
        {
            return @"this is a test";
        }
        else
        {
            return "this is a test";
        }
    }

    public static void Main(string[] args)
    {
        var verbatim = GetString(true);
        var normal = GetString(false);

        // should print 'true', if I'm not mistaken, because of string interning
        Console.WriteLine("Reference equals:" + ReferenceEquals(verbatim, normal));

        // will definitely print 'true'
        Console.WriteLine("Equals:" + verbatim.Equals(normal));
    }
}
逐字字符串(以
@
为前缀的字符串文字)仅用于允许更简单的文件系统访问和正则表达式编写,因为在逐字字符串中,
\
字符不被视为转义字符。这样,您就不必编写
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>来匹配正则表达式中的字符串
,而只需编写
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

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

public class Program
{
    public string GetString(bool verbatim)
    {
        if(verbatim)
        {
            return @"this is a test";
        }
        else
        {
            return "this is a test";
        }
    }

    public static void Main(string[] args)
    {
        var verbatim = GetString(true);
        var normal = GetString(false);

        // should print 'true', if I'm not mistaken, because of string interning
        Console.WriteLine("Reference equals:" + ReferenceEquals(verbatim, normal));

        // will definitely print 'true'
        Console.WriteLine("Equals:" + verbatim.Equals(normal));
    }
}

什么“字符串文字问题”?有什么问题?@“^[ABCDEFG]$”vs“^[ABCDEFG]$”嗯?在你的问题中,你真的需要更明确地说明你想做什么。“下面的代码不起作用”这是编程中最没有价值的语句。你真的应该描述一下它是如何不起作用的。编译错误?运行时故障?行为与预期不同?(那么,您期望得到什么,您实际看到了什么?)可以在C#中定义逐字记录字符串,方法是在字符串文本前面加上
@
,例如
@“我不需要转义:\”
,如果这是您的意思的话。但到底出了什么问题?什么“字符串文字问题”?有什么问题?@“^[ABCDEFG]$”vs“^[ABCDEFG]$”嗯?在你的问题中,你真的需要更明确地说明你想做什么。“下面的代码不起作用”这是编程中最没有价值的语句。你真的应该描述一下它是如何不起作用的。编译错误?运行时故障?行为与预期不同?(那么,您期望得到什么,您实际看到了什么?)可以在C#中定义逐字记录字符串,方法是在字符串文本前面加上
@
,例如
@“我不需要转义:\”
,如果这是您的意思的话。但到底出了什么问题?好吧,在这种情况下,你必须定义“不工作”@Mavershang:打字错误?那么听起来您没有显示实际使用的代码,而是键入了其他代码?如果是这样的话,那么就不可能从你的问题中判断出你实际使用的代码有什么问题……使用CA而不是UA,对我来说也很好