如何提取引号(双引号或单引号)

问题描述:

问题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可以嵌套在<td>

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

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

正则表达式:

(?:"(?<text>[^"]*)")|(?:'(?<text>[^']*)')

和整个片段:

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

可测试上my blog(需要的Silverlight)

+0

它是为了避免写的方式'(? [^“] *)'两次吗?它可以是一个很长的复杂图案。 – ca9163d9 2012-07-06 21:26:22

看起来这是一个2合1的问题的权利?

我的回答1

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

然后#2

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

ABC | xyz |高清< - 想象这样

不要忘记修剪空间使用效果

+0

第二个解决方案将匹配' ......'这是没有很好地形成。 – ca9163d9 2012-07-06 21:28:28

+0

是的,它有点不简洁(wellformed),但它取决于你的数据将如何来找你。 你可以不喜欢这样,如果你想, ((*)。)|((*)。)|((*))。 – fedmich 2012-07-07 16:45:52

之前第一问题用途:

("(?<content>[^"]*)")|('(?<content>[^']*)')

第二问题:

>(?<content>\w*\s*<td>.*</td>[\w\s]*)<

并获得组名为内容两种。