首页 > 解决方案 > Python:如果使用正则表达式从另一个字符串中提取子字符串

问题描述

我想使用 regex 从 url 中提取一个值,如果存在,

我的字符串:

string = "utm_source=google&utm_campaign=replay&utm_medium=display&ctm_account=4&ctm_country=fr&ctm_bu=b2c&ctm_adchannel=im&esl-k=gdn|nd|c427558773026|m|k|pwww.ldpeople.com|t|dm|a100313514420|g9711440090"

从这个字符串中,我想提取: c427558773026 ,要提取的值将始终以 c 开头并具有此模式 |c*|

import re
pattern = re.compile('|c\w|')
pattern.findall(string)

在我的情况下结果是没有的,我使用的是 python 2.7

标签: pythonregex

解决方案


\|您可以使用环视在左侧和右侧断言一个管道(不是转义) ,并匹配一个c字符后跟 1 个以上的数字\d+

(?<=\|)c\d+(?=\|)

正则表达式演示

import re
string = "utm_source=google&utm_campaign=replay&utm_medium=display&ctm_account=4&ctm_country=fr&ctm_bu=b2c&ctm_adchannel=im&esl-k=gdn|nd|c427558773026|m|k|pwww.ldpeople.com|t|dm|a100313514420|g9711440090"
print(re.findall(r"(?<=\|)c\d+(?=\|)", string))

或者像@Wiktor Stribiżew建议的那样,使用一个捕获组忽略后面的内容:

\|(c\d+)(?=\|)

正则表达式演示


推荐阅读