在python中使用正则表达式解析查询字符串

在python中使用正则表达式解析查询字符串,python,regex,Python,Regex,我正在尝试使用RE解析url字符串, 这是我的模式qid=(.*?&+?它确实找到了查询字符串,但是如果url末尾没有&,那么它就会失败 请查看我试图获取“qid”查询字符串值的页面。您可以(也可能应该)用以下方法解决它: 对于正则表达式方法,您可以检查是否有&或字符串结尾: qid=(.*?)(?:&|$) (?:…)这里是一个非捕获组。我同意@alecxe的观点,这最好通过urlparse处理。但是,这里有一些re选项。主要技巧是使用lookback,(? qid=(.*?)(?:

我正在尝试使用RE解析url字符串, 这是我的模式
qid=(.*?&+?
它确实找到了查询字符串,但是如果url末尾没有
&
,那么它就会失败

请查看我试图获取“qid”查询字符串值的页面。

您可以(也可能应该)用以下方法解决它:

对于正则表达式方法,您可以检查是否有
&
或字符串结尾:

qid=(.*?)(?:&|$)

(?:…)
这里是一个非捕获组。

我同意@alecxe的观点,这最好通过
urlparse处理。但是,这里有一些
re
选项。主要技巧是使用lookback,
(?
qid=(.*?)(?:&|$)
import re

# Single line version
s_1 = 'https://xx.com/question/index?qid=2ss2830AA38Wng'
s_2 = 'https://xx.com/question/index?qid=2ff38Wng&a=aubb&d=ajfbjhcbha'
q_1 = '(?<=qid=)([^&]*)(?=&)?'

print re.findall(q_1, s_1)
print re.findall(q_1, s_2)

# Multiline version V1
s_m = s_1 + '\n' + s_2
q_m = '(?<=qid=)([^&\n]*)(?=&)?'

print re.findall(q_m, s_m)

# Multiline version V2
q_m_2 = '(?<=qid=)([A-Za-z0-9]*)(?=&)?'

print re.findall(q_m_2, s_m)
Single Line Verison
['2ss2830AA38Wng']
['2ff38Wng']

Multiline version V1
['2ss2830AA38Wng', '2ff38Wng']

Multiline version V2
['2ss2830AA38Wng', '2ff38Wng']