正则表达式帮助用引号提取值

时间:2012-04-19 14:02:44

标签: c# regex express

我一直在努力为一个字符串创建一个RegEx近一天但仍然没有成功,有人可以帮忙吗?

string example (double quotes are options, and can also be single quotes):
    "234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />"

and the following groups should be extracted:
    234
    <img src="http://abc.com/a.jpg" onclick="alert(""working with 'quotes'?"");" />

希望这很清楚,任何人都可以帮助!!

2 个答案:

答案 0 :(得分:1)

我不确定这个正则表达式的效率,但这里有一个匹配你的字符串。

<强>规则

  1. 数字引号是可选的,可以是单引号。
  2. html周围的引号是可选的,可以是单引号。
  3. 问号后的空格可以是0或许多。
  4. <强>输入

    "234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />"
    

    <强>正则表达式

    ^['"]?(?<number>\d+)['"]?\?\s*['"]?(?<html>\<.*\>)['"]?$
    

    输出组

    number: 234
    html: <img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />
    

答案 1 :(得分:0)

这是一个快速解决方案(在JavaScript中):

var s = "\"234\"? \"<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />\"";
var matches = s.match(/['"][\d]*['"](?=[\s]*\?)|['"]<[^><]*>['"]/ig);

第一部分['"][\d]*['"](?=[\s]*\?)匹配引号内的数字,后跟可选空格和?。
第二部分['"]<[^><]*>['"]匹配引号内的任何符号(&lt;,&gt;除外)和&lt;&gt;。

此解决方案的一个缺点是匹配的结果用引号括起来 希望它能帮助您实现所需。