如何在Python中用正则表达式从webelement提取字符串并存入列表
实现方案
原代码问题说明
- 正则匹配逻辑倒置:你需要先匹配
Accountant开头的行提取姓名,再匹配下一行的职位,原正则要求行首为vice-president,和实际文本结构完全不匹配 - 字符匹配规则错误:实际文本中职位是
Vice President(空格分隔、首字母大写),你写的是vice-president(连字符、全小写),不存在匹配可能 - 没有处理文本的换行分组逻辑:原始文本按【姓名行+职位行】成对排列,你没有做对应分组处理
可直接运行的实现代码
方案1:逐行分组处理(可读性更高)
import re # raw_text替换为你的webelement.text raw_text = """Accountant Johnathan Christensen <br> President<br> Accountant Annete Benning<br> Vice President """ result = [] # 先清洗<br>标签,拆分有效行 valid_lines = [line.replace("<br>", "").strip() for line in raw_text.splitlines() if line.strip()] # 按两行一组遍历提取内容 for idx in range(0, len(valid_lines), 2): # 提取姓名:Accountant后面的所有内容 name = re.search(r"Accountant\s+(.+)", valid_lines[idx]).group(1) # 处理职位:替换空格为连字符,匹配要求的输出格式 position = valid_lines[idx+1].replace(" ", "-") result.append([name, position]) print(result)
运行输出:
[['Johnathan Christensen', 'President'], ['Annete Benning', 'Vice-President']]
方案2:单条正则一次性匹配
import re raw_text = """Accountant Johnathan Christensen <br> President<br> Accountant Annete Benning<br> Vice President """ # 直接匹配成对的姓名+职位 matches = re.findall(r"Accountant\s+(.+?)\s*<br>\s*(.+?)\s*(?:<br>|$)", raw_text) result = [[name, pos.replace(" ", "-")] for name, pos in matches] print(result)
内容的提问来源于stack exchange,提问作者Eduardo Rosa Kras Borges
相关产品推荐
相关产品推荐

