首页 > 解决方案 > Pandas:尝试提取两种不同的模式

问题描述

要从我正在使用的字符串中提取特定数字:

df['URL'].str.extract(r'dir=sale.aspx\%3fvpid%\w{2}(\d+)\%*',expand=False)

字符串示例:

'a'|'b'|'c'|'d|'0CCC63BF60D2&dir=sale.aspx%3fvpid%3d49398%26utm_source%xyz'|'e'

在这里我要提取:49398

对于这种字符串,我必须在相同的代码中提取第二个模式:

'a'|'b'|'c'|'d'|'6A5528CD54F4&dir=sale.aspx&vpid=66395&utm_source=abc'|'a'

在这里我要提取:66395

我需要使用尝试两种不同模式的东西。

我正在使用 python 2,7

标签: pythonregexpandas

解决方案


你可以试试这个模式:

pattern = r'dir=sale.aspx(?:\%3fvpid%\w{2}|\&vpid=)(\d+)\%*'

# test data
df = pd.DataFrame({"URL":[
    "'a'|'b'|'c'|'d|'0CCC63BF60D2&dir=sale.aspx%3fvpid%3d49398%26utm_source%xyz'|'e'",
    "'a'|'b'|'c'|'d'|'6A5528CD54F4&dir=sale.aspx&vpid=66395&utm_source=abc'|'a'"
]})

# regex
df.URL.str.extract(pattern)

输出:

       0
0  49398
1  66395

推荐阅读