正则表达式是一种用于匹配字符串中字符组合的模式,可以用来在HTML文档中提取标记之间的内容。在HTML标记之间获取单词通常需要匹配开始标记和结束标记之间的文本内容。
<([a-zA-Z]+)[^>]*>(.*?)<\/\1>
这个模式可以匹配大多数HTML标记及其内容:
([a-zA-Z]+)
匹配标记名[^>]*
匹配标记内的属性(.*?)
非贪婪匹配标记间的内容<\/\1>
匹配对应的结束标记<tag[^>]*>([^<]+)<\/tag>
将tag
替换为你需要的HTML标记名(如div
、p
、span
等)
import re
html = '<div class="content">Hello <span>World</span></div>'
# 提取div标记内的所有内容
pattern = r'<div[^>]*>(.*?)<\/div>'
matches = re.findall(pattern, html, re.DOTALL)
print(matches) # 输出: ['Hello <span>World</span>']
# 提取span标记内的单词
pattern = r'<span[^>]*>([^<]+)<\/span>'
matches = re.findall(pattern, html)
print(matches) # 输出: ['World']
# 提取所有标记内的文本内容(不包括嵌套标记)
pattern = r'<[a-zA-Z]+[^>]*>([^<]+)<\/[a-zA-Z]+>'
matches = re.findall(pattern, html)
print(matches) # 输出: ['World']
const html = '<div class="content">Hello <span>World</span></div>';
// 提取div标记内的所有内容
const divPattern = /<div[^>]*>(.*?)<\/div>/gs;
const divMatches = html.match(divPattern);
console.log(divMatches); // 输出: ['<div class="content">Hello <span>World</span></div>']
// 提取span标记内的单词
const spanPattern = /<span[^>]*>([^<]+)<\/span>/g;
const spanMatches = [...html.matchAll(spanPattern)].map(m => m[1]);
console.log(spanMatches); // 输出: ['World']
原因:
解决方案:
<tag[^>]*>
而不是<tag>
.*?
而不是贪婪匹配.*
原因:
解决方案:
re.DOTALL
标志(Python)或s
标志(JavaScript)来匹配跨行内容[^<]+
来匹配非标记内容对于复杂的HTML处理,建议使用专门的HTML解析器,如:
这些工具能更可靠地处理HTML文档的结构和嵌套关系。
没有搜到相关的文章