使用Python和正则表达式从字符串中提取子字符串
我在“页面”列中有一个包含很长字符串的pandas数据帧,我正试图从中提取一个子字符串: 示例字符串:/ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&搜索\查询=示例一&y=0&x=0 使用正则表达式,我很难确定如何提取两个符号之间的字符串,并删除较大字符串的所有其他字符部分 到目前为止,我的代码如下所示:使用Python和正则表达式从字符串中提取子字符串,python,regex,pandas,Python,Regex,Pandas,我在“页面”列中有一个包含很长字符串的pandas数据帧,我正试图从中提取一个子字符串: 示例字符串:/ex/search/!tu/p/z1/zVJdb4IwFP0r88HH0Sp hK/dz/d5/L2dBISEvZ0FBIS9nQSEh/?s&搜索\查询=示例一&y=0&x=0 使用正则表达式,我很难确定如何提取两个符号之间的字符串,并删除较大字符串的所有其他字符部分 到目前为止,我的代码如下所示: import pandas as pd import re dataset = pd.re
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)
上面的代码运行,但不会向我的新电子表格输出任何内容
提前感谢。您可以使用从URL中提取查询字符串,然后使用以下内容对其进行解析: 编辑:从
页面
列中的所有页面提取查询字符串
:
dataframe['Page'] = dataframe['Page'].apply(lambda page: parse_qs(urlparse(page).query)['search_query'][0])
您可以使用从URL提取查询字符串,然后使用以下方法对其进行解析: 编辑:从
页面
列中的所有页面提取查询字符串
:
dataframe['Page'] = dataframe['Page'].apply(lambda page: parse_qs(urlparse(page).query)['search_query'][0])
你可以试试这个
(?<=&).*?(?=&)
(?你可以试试这个
(?<=&).*?(?=&)
(?快速有效的方法
示例数据:
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
代码:
示例输出:
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对为列添加标签,那么这将是一种不同的提取后缀。快速有效的方法
示例数据:
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
代码:
示例输出:
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对为列添加标签,那将是一个不同的提取后缀。欢迎这样做!将一些示例数据作为文本包含总是很有帮助的。最简单的方法是将df.head()
的输出粘贴到问题中的代码块中,方法类似于dataframe.Page.str.split(“&”).str[1]
?可能,dataframe['Page'].str.extract(r'&([^&]+)&'))
可以。此外,解析数据帧的字符串表示形式只是自找麻烦。而不是对字符串序列进行操作。啊,我明白了。感谢您澄清这一点。欢迎这样做!将一些示例数据作为文本包含总是很有帮助的。最简单的方法是粘贴df.head()的输出
放入问题中的代码块类似于dataframe.Page.str.split(&”).str[1]
?可能是dataframe['Page'].str.extract(r'&([^&]+)&'))
就可以了。此外,解析数据帧的字符串表示形式只是自找麻烦。而不是对字符串序列进行操作。啊,我明白了。感谢您澄清这一点。您可能想补充一点,这应该像使用dataframe.Page.apply(parseqs)一样使用
或类似。有没有更好的编程方法?我有几千行数据,每个单元格都是唯一的字符串。因此,您想从每个路径提取查询字符串的值?非常感谢您的帮助,先生。这是我成功使用的解决方案。我更新了一点答案。结果是在将查询字符串传递给parseqs
之前,需要首先提取查询字符串。鉴于数据的结构,这是不必要的,但它会因不同的输入而中断。您可能需要添加这样的内容,即应像dataframe.Page.apply(parseqs)一样使用查询字符串
或类似。有没有更好的编程方法?我有几千行数据,每个单元格都是唯一的字符串。因此,您想从每个路径提取查询字符串的值?非常感谢您的帮助,先生。这是我成功使用的解决方案。我更新了一点答案。结果是在将查询字符串传递给parseqs
之前,需要先提取查询字符串。鉴于数据的结构,这是不必要的,但它会因不同的输入而中断。