【问题标题】:regex.replace #number;#正则表达式.replace #number;#
【发布时间】:2010-11-29 17:46:11
【问题描述】:

要查找的正则表达式是什么 (PoundSomenumberSemiColonPound)(又名 #Number;#)?我用过这个,但不工作

 string st = Regex.Replace(string1, @"(#([\d]);#)", string.Empty);

【问题讨论】:

    标签: c# .net regex replace


    【解决方案1】:

    您正在寻找#\d+;#

    • \d 匹配单个数字字符
    • + 匹配前面的一个或多个字符。

    【讨论】:

    • 仍然无法正常工作 Regex.Replace(string1, @"(#([\d+]);#)", string.Empty);
    • 不要使用 []。你需要 Regex.Replace(string1, @"#\d+;#", string.Empty);
    • 不要使用方括号(或者,至少,将+ 放在它们之外)
    【解决方案2】:
    (\x23\d+\x3B\x32)
    

    #/ 都用于模式周围,因此很麻烦。尝试使用上述方法(通常当我遇到特定字符的问题时,我会恢复为它们的十六进制传真(asciitable.com 有很好的参考)

    编辑忘记分组替换。

    EDITv2以下对我有用:

    String string1 = "sdlfkjsld#132;#sdfsdfsdf#1;#sdfsdfsf#34d;#sdfs";
    String string2 = System.Text.RegularExpressions.Regex.Replace(string1, @"(\x23\d+\x3B\x23)", String.Empty);
    Console.WriteLine("from: {0}\r\n  to: {1}", string1, string2);;
    

    输出:

    from: sdlfkjsld#132;#sdfsdfsdf#1;#sdfsdfsf#34d;#sdfs
      to: sdlfkjsldsdfsdfsdfsdfsdfsf#34d;#sdfs
    Press any key to continue . . .
    

    【讨论】:

    • Regex.Replace(string1, @"(\x23\d+\x3B\x32)", string.Empty);没用。
    • 请看我更新的帖子,对我来说效果很好。 (您是否希望将结果放回 string1 而不是作为函数结果返回?)
    • #\d+;# 这样稍微健全的正则表达式也可以解决问题。这不是 Perl,所以不需要 # 和 /。所以没有必要使用字符代码。
    • 我在asp.net(ascx 文件)的Gridview 控件上使用它,并将把它用作sharepoint 的Web 部件。我想知道使用十六进制是否是个好主意。
    • @Jamil:你不需要在这里使用十六进制。请查看其他一些答案。
    【解决方案3】:

    使用\d 时不需要字符类,正如 SLaks 指出的那样,您需要+ 来匹配一个或多个数字。此外,由于您没有捕获任何内容,因此括号也是多余的,所以应该这样做

    string st = Regex.Replace(string1, @"#\d+;#", string.Empty);
    

    【讨论】:

      【解决方案4】:

      您可能需要转义 # 符号,它们通常被解释为注释标记,除了 @SLaks 关于使用 + 允许多个数字的注释

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2012-07-13
        • 2013-10-13
        • 1970-01-01
        • 2017-01-18
        相关资源
        最近更新 更多