为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 和正则表达式从字符串中提取子字符串

使用 Python 和正则表达式从字符串中提取子字符串

杨__羊羊 2021-09-14 15:51:18
我在“页面”列中有一个包含很长字符串的熊猫数据框,我试图从中提取子字符串:示例字符串: /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s& search_query=示例一&y=0&x=0使用正则表达式,我很难确定如何提取两个&符号之间的字符串并删除较大字符串的所有其他字符部分。到目前为止,我的代码如下所示:import pandas as pdimport redataset = pd.read_excel(r'C:\Users\example.xlsx')dataframe = pd.DataFrame(dataset)dataframe['Page'] = format = re.search(r'&(.*)&',str(dataframe['Page']))dataframe.to_excel(r'C\Users\output.xlsx)上面的代码运行但不会向我的新电子表格输出任何内容。
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

您可以使用 提取 URL 中的查询字符串urllib.parse.urlparse,然后使用 解析它urllib.parse.parse_qs:


>>> from urllib.parse import urlparse, parse_qs

>>> path = '/ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0'

>>> query_string = urlparse(path).query  

>>> parse_qs(query)

{'search_query': ['example one'], 'y': ['0'], 'x': ['0']}

编辑:query_string从Page列中的所有页面中提取:


dataframe['Page'] = dataframe['Page'].apply(lambda page: parse_qs(urlparse(page).query)['search_query'][0])



查看完整回答
反对 回复 2021-09-14
?
狐的传说

TA贡献1804条经验 获得超3个赞

你可以试试这个

(?<=&).*?(?=&)

解释

  • (?<=&)- 积极的回顾。匹配&

  • (.*?)- 匹配除换行符以外的任何内容。(懒人方法)。

  • (?=&)- 正向前瞻匹配&


查看完整回答
反对 回复 2021-09-14
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

快速高效的熊猫方法。


示例数据:


temp,page

1,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0

2,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0

3,  /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0

代码:


df = example.data # from above

df["query"] = df['page'].str.split("&", expand=True)[1].str.split("=", expand=True)[1]

print(df)

示例输出:


   temp  \

0  1          

1  2          

2  3          


                                                                                                          page  \

0    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   

1    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   

2    /ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp-hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&search_query=example one&y=0&x=0   


         query  

0  example one  

1  example one  

2  example one  

如果您想根据 key=value 对标记您的列,那将是不同的提取后记。


查看完整回答
反对 回复 2021-09-14
  • 3 回答
  • 0 关注
  • 332 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号