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

Python中COPYSUCCESSFUL正则匹配失效致DataFrame无数据求助

问题解决:COPYSUCCESSFUL列提取全为NaN的原因与修复

问题背景

尝试从给定列表中提取三类数据存入DataFrame:COPYSUCCESSFUL后的URL、one test4:后的数字、soup test0:后的数字。其中后两类提取正常,但COPYSUCCESSFUL列全为NaN,预期应提取两个URL链接。

问题根源

问题出在COPYSUCCESSFUL对应的正则表达式上:

pattern1 = re.compile(r"COPYSUCCESSFUL:\s*(.*?)(?=')")

你在正则中加入了正向预查(?='),这个规则要求匹配到的URL后面必须紧跟着单引号,但你的列表中COPYSUCCESSFUL:后的URL结尾没有单引号,导致正则无法匹配到任何内容,最终该列全为NaN。

修复方案

去掉不必要的单引号预查,直接匹配COPYSUCCESSFUL:之后的所有内容(直到字符串末尾):

pattern1 = re.compile(r"COPYSUCCESSFUL:\s*(.*)")

如果想更严谨,确保匹配到非空内容,可以用:

pattern1 = re.compile(r"COPYSUCCESSFUL:\s*(\S.*)")

完整修复后的代码

import re
import pandas as pd
import numpy as np

test = ['bbb', 'soup test0:88', 'axx', 'xzz', 'one test4: 34','COPYSUCCESSFUL: https://test.test2.nugget.com/f02/01/test1.csv',
        'COPYSUCCESSFUL: https://test.test3.nugget.com/f02/01/test3.csv', 'one test4: 66']

# 修正后的正则表达式
pattern1 = re.compile(r"COPYSUCCESSFUL:\s*(.*)")
pattern2 = re.compile(r"one test4:\s*(\d+)")
pattern3 = re.compile(r"soup test0:\s*(\d+)")

copysuccessful = []
one_test4 = []
soup_test0 = []

for item in test:
    match1 = pattern1.search(item)
    match2 = pattern2.search(item)
    match3 = pattern3.search(item)
    
    copysuccessful.append(match1.group(1) if match1 else np.nan)
    one_test4.append(match2.group(1) if match2 else np.nan)
    soup_test0.append(match3.group(1) if match3 else np.nan)

data = {'COPYSUCCESSFUL': copysuccessful, 'one test4': one_test4, 'soup test0': soup_test0}
df = pd.DataFrame(data)

print(df)

运行后,COPYSUCCESSFUL列会正确提取出两个URL链接,其他列保持正常提取结果。

内容的提问来源于stack exchange,提问作者Thanatos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:02