这就是我使用的方法
output = System.Text.RegularExpressions.Regex.Replace(output, "(?s)/th>(.*?)</tbody>", "$1")
请注意,我使用(.*?)是因为我希望搜索不合理。那就是周围有几个。我想删除最后一次>上方的文本
这就是我得到的。
<!-- statistics_period -->
<input name="subForm" type="hidden" value="1">
<input name="hidTotal" type="hidden" value="886">
<div class="domlistframe">
<div class="divMainListingTable">
<table width="76%" align="left" class="mainListTable" cellspacing="0" cellpadding="3">
<tbody><tr>
<th nowrap=""> <
<th colspan="4"> </th>
<th id="sercol" nowrap="" colspan="11">Totals</th>
你看到了吗?那里有几个。
是的,我非常清楚用正则表达式解析html的可怕后果,这里描述了RegEx匹配除了XHTML自包含标记之外的开放标记。
不管怎样,我主要是在分析表。正在工作
注意:这里有一个更简单的问题,与上面的问题等效假设我有这样的文本
cow cow cow chicken cat cow cat dog hello bla.
说我想要cat dog hello
。这是最后一头牛和布拉之间的文字。
它的正则表达式是什么?
请注意,我希望文本介于LASTcow和bla之间。
做
cow.*bla
会给我完整的文本
cow.?*bla
应该会给我想要的。然而,正如您从我使用的示例中看到的那样,它不起作用。
提示
试试模式:
.*cow((?!cow).*?)bla
对于CCD_ 3问题。
前导.*
跳过所有内容,直到遇到最后一个cow
为止
这只是部分答案。基本上,我通过使用hjpotter92使用的技术解决了这个问题。
我做的是
output = System.Text.RegularExpressions.Regex.Replace(output, "(?s).*/th>(.*?)</tbody>", "$1")
因为第一个是贪婪的。它将自动匹配包含.*th>的最大字符串
还有一些问题。为什么我的原始代码不起作用?
我怀疑这与正则表达式从左到右的工作有关。同样,任何输入都可以。
我还要感谢htpotter告诉我regex中的补码运算符是什么
嗯。。。这个答案确实回答了我应该怎么做才能让它发挥作用的问题,现在它正在发挥作用。然而,这是基于另一个答案。我应该选择哪一个作为答案?