【问题标题】:C# Unrecognized escape sequenceC# 无法识别的转义序列
【发布时间】:2013-04-20 00:04:59
【问题描述】:

我在 C# 上遵循 Regex 及其导致的错误:C# Unrecognized escape sequence on \w \. \/

string reg = "<a href=\"[\w\.\/:]+\" target=\"_blank\">.?<img src=\"(?<imgurl>\w\.\/:])+\"";
Regex regex = new Regex(reg);

我也试过

string reg = @"<a href="[w./:]+" target=\"_blank\">.?<img src="(?<imgurl>w./:])+"";

但是这样字符串“结束”在 href=""-char

谁能帮帮我?

【问题讨论】:

  • 你会建议什么而不是使用正则表达式?尝试在 html 页面中获取大量项目时,没有太多选择。
  • 使用旨在解析它的东西,HTML Agility Pack 是一个常见的。它会解析出所有的 html 标记,让你把它们拆开,然后用它们做任何你需要的事情。
  • 我正在使用 HTML Agility 包,但因为我正在解析的网站似乎不是动态的,所以我认为他们手动发布帖子。这意味着有时网站结构会发生变化。所以我决定对那些我看到的变化的部分尝试正则表达式。

标签: c# regex


【解决方案1】:

使用 @ 文字时,使用 "" 转义引号。

【讨论】:

  • 这是正确的答案...只是无法将其评为已解决,因为它有 15 分钟的时间块来标记它。标记!谢谢。
【解决方案2】:

【讨论】:

    【解决方案3】:

    这是一个更好的正则表达式,你的问题很多:

    string reg = @"<a href=""[\w./:]+"" target=""_blank"">.?<img src=""(?<imgurl>[\w./:]+)""";
    Regex regex = new Regex(reg);
    

    var m = regex.Match(@"http://www.yahoo.com"" target=""_blank"">http://flickr.com/something.jpg""");

    捕获&lt;a href="http://www.yahoo.com" target="_blank"&gt;&lt;img src="http://flickr.com/something.jpg"。 你的问题:正斜杠不需要转义,在img部分缺少[括号,将)放在组关闭的正确位置。

    然而,正如我们多次提到的,HTML 的结构不足以被正则表达式捕获。但是,如果您需要快速完成一些肮脏的事情,它会做的。

    【讨论】:

    • +1,但你仍然有几个不必要的反斜杠。事实上,你真正需要的只是出现在两次 \w 中。
    • 你是对的。编辑删除其中的大部分。我留在. 之前的那个,因为否则它会匹配任何字符而不是句号,这显然很糟糕......
    • 不,那个也可以。在字符类中,. 只匹配一个点。
    • 不知道。经测试,你是对的。为正确起见进行了编辑。
    【解决方案4】:

    这是交易。 C# 字符串将某些字符组合识别为特定的特殊字符来操作字符串。例如,您可能熟悉在字符串中插入\n 以用作行尾字符? 当您将单个\ 放入字符串中时,它会尝试将其与下一个字符一起验证为这些特殊命令之一,并在其不是有效组合时抛出错误。 幸运的是,这并不妨碍您使用反斜杠,因为其中一个序列 \\ 用于此目的,被解释为单个反斜杠。

    因此,在实践中,如果您将字符串中的每个反斜杠替换为双反斜杠,它应该可以正常工作。

    【讨论】:

    • 我喜欢你的努力,但你能举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多