正则表达式技术咨询:从单行网页爬取文本中提取链接
提取单行文本中href链接的解决方案
没问题,针对你这种从单行爬取文本里提取href链接的需求,我给你两种实用方案,不管你用Python脚本还是命令行工具都能轻松搞定。
方案1:用Python脚本处理(跨平台通用)
这种方法适合需要灵活调整逻辑,或者在Windows环境下没有grep工具的情况,步骤很清晰:
- 读取源文件的单行内容
- 用正则匹配所有符合
href="链接内容"格式的链接 - 将提取到的链接逐行写入新文件
下面是完整的Python代码:
import re # 替换成你的源文件路径 input_file_path = "your_input_file.txt" # 替换成你要保存结果的文件路径 output_file_path = "extracted_links.txt" # 读取单行内容(因为你的文件是单行无多余空格) with open(input_file_path, "r", encoding="utf-8") as f: content = f.read() # 正则匹配:捕获href="和"之间的所有内容 pattern = r'href="([^"]+)"' links = re.findall(pattern, content) # 将链接逐行写入输出文件 with open(output_file_path, "w", encoding="utf-8") as f: for link in links: f.write(link + "\n")
正则说明:
href=":精准匹配文本里的href="前缀(也就是网页里转义后的href=")([^"]+):捕获组,匹配任意不是"的字符,直到遇到下一个",这部分就是我们要的链接内容":匹配结尾的转义双引号,确保只提取到完整的链接
方案2:用命令行grep快速处理(适合Linux/macOS/WSL)
如果你习惯用命令行,这是最快的方式,一行命令就能搞定:
grep -oP 'href="\K[^"]+' your_input_file.txt > extracted_links.txt
参数与正则说明:
-o:只输出匹配到的部分,而不是整行内容-P:启用Perl兼容的正则表达式,支持\K语法href="\K:\K的作用是忽略前面匹配到的href=",直接从后面开始输出匹配内容[^"]+:和Python方案里的逻辑一样,匹配到下一个"为止的所有字符,也就是链接内容
额外说明
如果你的文本里存在用单引号包裹的href(比如href='链接内容'),只需要把正则里的"替换成'即可:
- Python正则改成:
r"href='([^']+)'" - grep命令改成:
grep -oP 'href='\''\K[^'\'']+' your_input_file.txt > extracted_links.txt
内容的提问来源于stack exchange,提问作者Zdeněk Nováček




