我有一个简单的HTML字符串。从该字符串中,我想提取两个HTML标签之间的内容。提取两个标签之间的内容
我的源字符串是这样的:
"Hello <b>world</b> test"
我想解压: “世界”
我该怎么办呢?
我有一个简单的HTML字符串。从该字符串中,我想提取两个HTML标签之间的内容。提取两个标签之间的内容
我的源字符串是这样的:
"Hello <b>world</b> test"
我想解压: “世界”
我该怎么办呢?
尽管在极其简单的情况下这可能是可能的,但我强烈建议不要这样做。 Regexp功能不足以解析HTML。使用适当的HTML解析库。
我不知道你使用的是什么语言,这是一个VB.NET例子:“(。*)你好测试”
模式将
和Regex.Matches功能将采取您的输入和模式,并返回一组匹配。每个比赛将包含组,组0将是整个比赛:“你好世界测试”和组1将是组内的文本:“世界”
System.Text.RegularExpressions.Regex.Matches(“hello world (0).Groups(1)
而像Dervall说Regex可能没有足够强大的功能来执行你想要做的事情,而且你可能需要重新修改与HTML一起工作的模式,如使空白(空格,制表符和新行)可选为1例子。
检查编辑 - 标签已经因为格式不正确。 – 2012-02-06 20:38:27
假设你不是说任何标签,但是具体的标签(在这种情况下<b>
),并假设你的HTML结构完好,因此不包含嵌套<b>
标签:
(?s)<b[^>]*>((?:(?!</b>).)*)</b>
结果将是在组号1
说明:
(?s) # Allow the dot to match newlines (hope you're not using JavaScript)
<b[^>]*> # Match opening <b> tag
( # Capture the following:
(?: # Match (and don't capture)...
(?! # (as long as we're not at the start of
</b> # the string </b>
) # )
. # any character.
)* # Repeat any number of times
) # End of capturing group.
</b> # Match closing </b> tag
我会使用下面的表达式来验证结束标记是否与开始标记匹配。
(?<=<(b)>)[^>]+(?=</\1>)
更多的 “消化” 的例子是:
(?<=<(b)>)[^>]+(?=</b>)
在什么语言? – Kyle 2012-02-06 20:14:02
我们需要知道你使用这个正则表达式的语言。正则表达式用于识别文本。此外,你的例子与你的实际问题没有任何关系。看到这个问题关于HTML提取http://stackoverflow.com/a/1732454/1178921 – deltree 2012-02-06 20:17:45
在这里的权威答案:http://stackoverflow.com/a/1732454/85371 – sehe 2012-02-06 20:21:54