Python如何提取列表每个字符串元素中指定路径后的ID,缺失值补none
问题解决
原有代码问题
- 没有截取
worldandplaces/place-review/之后的ID部分,直接把整个匹配到的路径加入结果列表 - 当字符串中不存在匹配路径时,不会触发代码中的异常分支,所以第三个无ID的条目没有对应存入
none - 用
extend添加元素不符合「每个原列表项对应一个结果」的需求,应该用append逐条目添加结果
修复后实现(字符串匹配版)
myString =[" --------------- userLang: en-us refUrl: worldandplaces/place-review/12345-6789-d1e2-4444-907e555ce5d5 Email address: johndoe@gmail.com", " --------------- userLang: en-us refUrl: worldandplaces/place-review/09876-5432-c3d3-9999-307e555ce665 Email address: janedoe@gmail.com", "------ userLang: en-us refUrl: worldandplaces/ Email address: janedoe@gmail.com"] prefix = "worldandplaces/place-review/" placeID = [] for entry in myString: # 遍历拆分后的字符串片段,找符合前缀的项 match_frag = next((f for f in entry.split() if f.startswith(prefix)), None) if match_frag: # 截取前缀后的ID部分 placeID.append(match_frag[len(prefix):]) else: placeID.append("none") print(placeID)
运行输出:
['12345-6789-d1e2-4444-907e555ce5d5', '09876-5432-c3d3-9999-307e555ce665', 'none']
更稳定的正则实现
适配ID后不是空格的特殊场景,匹配逻辑更健壮:
import re myString =[" --------------- userLang: en-us refUrl: worldandplaces/place-review/12345-6789-d1e2-4444-907e555ce5d5 Email address: johndoe@gmail.com", " --------------- userLang: en-us refUrl: worldandplaces/place-review/09876-5432-c3d3-9999-307e555ce665 Email address: janedoe@gmail.com", "------ userLang: en-us refUrl: worldandplaces/ Email address: janedoe@gmail.com"] id_pattern = r"worldandplaces/place-review/([a-zA-Z0-9-]+)" placeID = [] for entry in myString: match_res = re.search(id_pattern, entry) placeID.append(match_res.group(1) if match_res else "none") print(placeID)
内容的提问来源于stack exchange,提问作者Baobab1988
相关产品推荐
相关产品推荐

