【发布时间】:2016-06-18 22:53:37
【问题描述】:
我想要,给定一个网页来提取每个出现的分隔字符串。我使用正则表达式来实现这一点,就像这样
Regex Rx = new Regex(before + "(.*?)" + after);
if (o is string)
{
string s = o as string;
List<string> results = new List<string>();
foreach (Match match in Rx.Matches(s))
{
results.Add(match.ToString().Replace(before, "").Replace(after, ""));
}
return results.ToArray();
}
我的输入是包含此文本的 html 字符串
<script type="text/javascript">
var s1 = new SWFObject("http://hornbunny.com/player.swf","ply","610","480","10","#000000");
s1.addParam("allowfullscreen","true");
s1.addParam("allowscriptaccess","always");
s1.addParam("flashvars","overlay=http://cdn1.image.somesite.com/thumbs/0/9/e/1/2/09e12f7aeec382bc63a620622ff535b6/09e12f7aeec382bc63a620622ff535b6.flv-3b.jpg&settings=http://somesite.com/playerConfig.php?09e12f7aeec382bc63a620622ff535b6.flv|0");
s1.write("myAlternativeContent");
</script>
我得到的结果是包含 0 个元素的字符串 [],因为 foreach (Match match in Rx.Matches(s)) 循环了 0 次。
但它恰好匹配 0 次,尽管我的文档中至少出现了 1 次。
我试图提取var s1 = new SWFObject 和</script> 之间的字符串作为分隔符,所以没有特殊字符,即使我没有转义我的字符串。
那个正则表达式似乎有什么问题?
工作:
if (o is string)
{
string s = o as string;
List<string> results = new List<string>();
foreach (Match match in Rx.Matches(s))
{
results.Add(match.Groups[1].Value);
}
return results.ToArray();
}
【问题讨论】:
-
您需要在
before和after中提供您的内容,并举例说明...*?本质上是懒惰的..它会在终止之前尽可能少地消耗..所以它是很高兴匹配 0 个字符 -
好吧,没有问号?但我希望正则表达式是懒惰的,所以它可以得到尽可能小的匹配,我不想在匹配中找到我的分隔符
-
如果您的字符串包含换行符,请使用
RegexOptions.Singleline。 -
@JDE 你需要提供一个例子
-
你的输入输出