使用正则表达式匹配最后一次出现的字符

时间:2013-10-09 13:16:43

标签: c# regex

我需要匹配:

<p><span style="font-size: 18px;"><strong>Hello</strong></span></p>

我需要匹配上一个>和第一个</之间的文本问候

使用(?=>)(.*?)(?=</)返回<span style="font-size: 18px;"><strong>Hello

谢谢!

5 个答案:

答案 0 :(得分:2)

我知道这不是你要找的答案,但用正则表达式解析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;

答案 1 :(得分:1)

你可以选择

/>([^<>]+)</

这应该会给你想要的匹配。

答案 2 :(得分:0)

您只需要匹配此特定字符串吗?如果是,那么你可以简单地使用:

/<strong>([^<]*)</strong>/

将匹配strong代码之间的任何文字。

答案 3 :(得分:0)

试试这个

正则表达式的常量变量是

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);

答案 4 :(得分:0)

我认为您的第一个look ahead必须更像:(?<=>)look behind >}

.*?替换为[^<>]*<>除外)。

如果您需要保留look around,您可以执行以下操作: (?<=>)([^<>]*)(?=</)

如果没有,您只需执行:>([^<>]*)</

不同之处在于,使用look around您不会在全局匹配中捕获< </