You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:01