首页 文章

使用Python和regex从字符串中提取子字符串

提问于
浏览
0

我有一个pandas数据框,在'page'列中包含非常长的字符串,我试图从中提取子字符串:

示例字符串:/ ex / search /!tu / p / z1 / zVJdb4IwFP0r88HH0Sp -hK / dz / d5 / L2dBISEvZ0FBIS9nQSEh /?s& search_query=example one &y = 0&x = 0

使用正则表达式,我很难确定如何在两个&符号之间提取字符串并删除更大字符串的所有其他字符 .

到目前为止,我的代码看起来像这样:

import pandas as pd
import re

dataset = 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 回答

  • 4

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

    >>> 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']}
    

    EDIT: 要从 Page 列中的所有页面中提取 query_string

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

    You can try this

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

    解释

    • (?<=&) - 正面观察 . 匹配 & .

    • (.*?) - 匹配除换行之外的任何内容 . (懒惰的方法) .

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

    Demo

  • 1

    快速高效的熊猫方法 .

    示例数据:

    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对标记列,那将是一个不同的提取词 .

相关问题