Regex来获取两个特定字符串之间的HTML
本文关键字:字符串 之间 HTML 两个 获取 Regex | 更新日期: 2023-09-27 18:23:53
我对正则表达式不是很精通,但我正在努力在ASP.Net中完成一些我认为需要它们的事情。
我正在拉入一个HTML文件,进行一些处理,并输出新的"合并"HTML。我正在努力的部分是获取位于我自己创建的两个预定义"标签"之间的一块代码。
以下是相关输入html:的示例
<table style="width: 500px; font-family: Trebuchet MS, sans-serif; font-size: 13px; background-color: #fff; border: 0; border-collapse: collapse;" align="center" cellspacing="0">
<thead>
<tr>
<th colspan="3" style="text-align: left;border-bottom: 1px solid #DDDDDD;">
Add-ons
</th>
</tr>
</thead>
<tbody>
[AddonsListSTART]
<tr style="border-bottom: 1px dashed #DDDDDD;">
<td>[AddonName]</td>
<td>[AddonQty]</td>
<td align="right">[AddOnPrice]</td>
</tr>
[AddonsListEND]
</tbody>
</table>
<br />
这是我的C#代码:
//Find Add-ons HTML : between [AddonsListSTART] & [AddonsListEND]
Regex rgxAddonSE = new Regex(@"'[AddonsListSTART'](?<MyHtml>.*)'[AddonsListEND']");
Match matchAddonSE = rgxAddonSE.Match(htmlEmail);
string htmlAddons = matchAddonSE.ToString();
我希望"htmlAddons"等于字符串:
<tr style="border-bottom: 1px dashed #DDDDDD;">
<td>[AddonName]</td>
<td>[AddonQty]</td>
<td align="right">[AddOnPrice]</td>
</tr>
问题是它总是空白的,而"matchAddonSE.Success"总是FALSE。我知道我的正则表达式有问题,但我不知道是什么。
提前感谢您的帮助。
Heather
我认为这可能与多行/单行处理有关。考虑http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#Singleline
问题是.*不包括新行。在这样的预定义标签中,regex在文本中出现一次(期望单个匹配)可能不是最好的方法,为什么不直接找到IndexOf并使用子字符串呢。
如果您仍然想使用regex,那么使用''s''s添加''r''n意为[.''r''n]*将与大致相同
''s相当于[''f''r''n''t''v]。
''S等价于[^''f''n''r''t''v]。
另一个选项是将regex匹配设置为单行模式。
下面是子字符串的使用示例。
String startTag = "[AddonsListSTART]";
String endTag = "[AddonsListEND]"
int start = htmlEmail.IndexOf(startTag );
int end = htmlEmail.IndexOf(endTag);
String res ="";
if((start>=0) && (end>=0)){
res = htmlEmail.substring(start + startTag.length,end - (start + startTag.length));
}
这里有一个单线模式的用法:(注意RegexOptions.Singleline)
//Find Add-ons HTML : between [AddonsListSTART] & [AddonsListEND]
Regex rgxAddonSE = new Regex(@"'[AddonsListSTART'](?<MyHtml>.*)'[AddonsListEND']", RegexOptions.Singleline);
Match matchAddonSE = rgxAddonSE.Match(htmlEmail);
string htmlAddons = matchAddonSE.ToString();
除了使用模式中的单线模式之外
Regex rgxAddonSE = new Regex(@"(?s)'[AddonsListSTART'](?<MyHtml>.*)'[AddonsListEND']");