我需要匹配:
<p><span style="font-size: 18px;"><strong>Hello</strong></span></p>
我需要匹配最后一个>
和第一个之间的文本 hello</
使用(?=>)(.*?)(?=</)
回报<span style="font-size: 18px;"><strong>Hello
谢谢!
我知道这不是您要寻找的答案,但是用正则表达式解析 html 就像用叉子吃汤一样。你最终会完成工作,但这非常令人沮丧。
试试这个,保持理智:
string html = "<p><span style=\"font-size: 18px;\"><strong>Hello</strong></span></p>";
System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(html);
string hello = doc.Descendants().LastOrDefault().Value;
你可以和
/>([^<>]+)</
那应该给你想要的匹配。
你只需要匹配这个特定的字符串吗?如果是,那么您可以简单地使用:
/<strong>([^<]*)</strong>/
这将匹配strong
标签之间的任何文本。
尝试这个
正则表达式的常量变量是
const string HTML_TAG_PATTERN = "<.*?>";
功能
static string StripHTML(string inputString)
{
return Regex.Replace
(inputString, HTML_TAG_PATTERN, string.Empty);
}
并调用函数
string str = "<p><span style='font-size: 18px;'><strong>Hello</strong></span></p>";
str = StripHTML(str);
我认为您的第一个look ahead
必须看起来更像(?<=>)
:( look behind
for >
)
并替换.*?
为[^<>]*
(除<
or之外的任何内容>
)。
如果你需要保留你的look around
,你可以这样做:
(?<=>)([^<>]*)(?=</)
如果没有,您可以简单地执行以下操作:>([^<>]*)</
不同之处在于,使用you 不会在全局匹配中look around
捕获<
任何一个。</