【问题标题】:How to extract the string in the quotes (either double quotes or single quotes) [closed]如何提取引号中的字符串(双引号或单引号)[关闭]
【发布时间】:2012-07-07 07:53:59
【问题描述】:

问题 1:

例如,

... "ab'cd" ...'ab"cd' ...

它应该分别得到ab'cdab"cd。可能有很多引用的字符串。


问题 2:

以及如何从以下字符串中提取text <td>...</td> text

<abc>text <td>...</td> text</abc>
<xyz>text <td>...</td> text</xyz>
<def>text <td>...</td> text</def>

abc、def、xyz 可以嵌套在&lt;td&gt; 中。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    正则表达式:

    (?:"(?&lt;text&gt;[^"]*)")|(?:'(?&lt;text&gt;[^']*)')

    还有整个sn-p:

    Regex regex = new Regex(
    @"(?:""(?<text>[^""]*)"")|(?:'(?<text>[^']*)')",
    RegexOptions.None
    );
    

    可在 my blog 上测试(需要 silverlight)

    【讨论】:

    • 有没有办法避免两次写(?&lt;text&gt;[^"]*)?它可能是一个很长的复杂模式。
    【解决方案2】:

    看起来这是一个二合一问题,对吧?

    我对 1 的回答是

    ((.*)['"](.*))
    

    那么对于#2

    <(abc|xyz|def)>(.*)<\/(abc|xyz|def)>
    

    abc | xyz | def

    在使用结果之前不要忘记修剪空格

    【讨论】:

    • 第二个解决方案将匹配&lt;abc&gt;...&lt;/xyz&gt;,它的格式不是很好。
    • 是的,它的格式有点不正确,但这取决于您的数据将如何提供给您。如果你愿意,你可以这样做, ((.*))|((.*))|((.*))
    【解决方案3】:

    对于第一个问题使用:

    ("(?&lt;content&gt;[^"]*)")|('(?&lt;content&gt;[^']*)')

    对于第二个问题:

    &gt;(?&lt;content&gt;\w*\s*&lt;td&gt;.*&lt;/td&gt;[\w\s]*)&lt;

    并为两者获取名为 content 的组。

    【讨论】:

      【解决方案4】:

      我想通了 - 使用反向引用。

      (["'])(?<q>.+?)\1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 2023-02-23
        • 2011-06-05
        相关资源
        最近更新 更多