我发现下面的代码来找到在文本here中的值的第n次出现。为什么用于查找第n次出现的函数不适用于带换行符的文本?
这是代码:
public static int NthIndexOf(this string target, string value, int n)
{
Match m = Regex.Match(target, "((" + value + ").*?){" + n + "}");
if (m.Success)
return m.Groups[2].Captures[n - 1].Index;
else
return -1;
}
我试图找到“</FORM>”的第二次出现的索引在一些网页(空间不会出现在原始字符串),并且它失败了,虽然它肯定存在于文本中。我也削减了网页的一些前缀,所以第二次出现将是第一次,然后我成功地找到表达式作为第一次出现。
在对此代码的评论之一中,有人写道:“如果目标字符串包含换行符,则此正则表达式不起作用。”
我的两个问题是:
为什么没有如果目标字符串包含换行符此代码的工作?
我该如何解决这个问题,所以它也适用于包含换行符的字符串(替换/删除换行符对我来说不算是一个好的解决方案)?
我不寻找其他技术来做同样的事情。
你能举一个输入和输出的例子吗? – gunr2171 2014-09-22 17:43:54
如果您尝试从HTML中读取数据,则可能需要考虑使用[Html Agility Pack](http://htmlagilitypack.codeplex.com/)而不是[regex](http://stackoverflow.com/问题/ 1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – 2014-09-22 17:49:57