3 回答

TA贡献1806条经验 获得超5个赞
主要编辑。您是对的:Yoshitha 的解决方案并不理想,因为您特别想要该正则表达式匹配中的两个元素。
然而,Pandas 确实有一个很好的正则表达式处理解决方案来帮助你。像这样的东西要整洁得多:
matches = csv_data.iloc[:,0].str.extract(r'(.*\/)(?!\/)(.*)', expand=True)
然后为了得到你的字典表示,我们可以运行: matches.set_index(0, drop=True).to_dict()[1]
如果输入中的 url 字符串与此正则表达式完全匹配,这可能仍然存在问题。
简单的例子:
l = ['https://example.s3.amazonaws.com/uploads/full/68518-5df5b5e5t5b.jpg', 'test_with_bad_url']
matches = pd.DataFrame(l).iloc[:,0].str.extract(r'(.*\/)(?!\/)(.*)', expand=True)
your_dict = matches.set_index(0, drop=True).to_dict()[1]
print(your_dict)
{'https://example.s3.amazonaws.com/uploads/full/': '68518-5df5b5e5t5b.jpg',
nan: nan}

TA贡献2003条经验 获得超2个赞
您可以更好地在此单列上使用 lambda 函数并将正则表达式操作保留在函数中并像这样调用:假设数据是数据框,字符串是列名:
data = pd.read_csv('list.csv', sep=',', header=None)
data.columns = ['string']
data['string'] = data['string'].apply(lambda x:regex_function(x))

TA贡献1852条经验 获得超1个赞
或者你可以试试这个代码:
csv_data = pd.read_csv('list.csv', sep=',', header=None, dtype=str)
csv_data = csv_data.fillna("")
pattern = re.compile(r'(.*\/)(?!\/)(.*)', flags=re.DOTALL)
url_file = {
pattern.findall(str(row))[0]:
pattern.findall(str(row))[1]
for index, row in csv_data.iterrows()
}
添加回答
举报