Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅匹配特定字符的正则表达式模式_Python_Regex - Fatal编程技术网

Python 如何仅匹配特定字符的正则表达式模式

Python 如何仅匹配特定字符的正则表达式模式,python,regex,Python,Regex,我得到的结果是?a=name&和匹配模式。组(1)为name 但如果我删除单词名,我就不会得到任何回报 line =abcsdfs?a=name&ab=fsdfsd&c=sfssf pattern = '\?a=(.+?)&' match_pattern = re.search(pattern, line) 我得到的结果是?a=&ab=fsdfsd&和match\u模式。组(1)as&ab=fsdfsd 我怎样才能阻止它走得更远。我的意思是如果不匹配模式,如何得到结果无

我得到的结果是
?a=name&
匹配模式。组(1)
name

但如果我删除单词名,我就不会得到任何回报

line =abcsdfs?a=name&ab=fsdfsd&c=sfssf
pattern = '\?a=(.+?)&'
match_pattern = re.search(pattern, line)
我得到的结果是
?a=&ab=fsdfsd&
match\u模式。组(1)
as
&ab=fsdfsd


我怎样才能阻止它走得更远。我的意思是如果不匹配模式,如何得到结果无/错误。组(1)

您应该匹配除“&”之外的所有符号:

line =abcsdfs?a=&ab=fsdfsd&c=sfssf
pattern = '\?a=(.+?)&'
match_pattern = re.search(pattern, line)
请尝试以下方法:

pattern = '\?a=([^&]*)'
请注意,
+?
匹配1或更多字符<代码>*?匹配0或更多字符

当然,如果您试图做的是匹配URL查询字符串,那么regex是错误的工具。尝试
urlparse
模块:

pattern = '\?a=(.*?)&'

你需要一个更好的正则表达式,你就不会有这样的问题。我不太明白你的要求。我正在检查“a=”是否存在,如果它是空的,抛出一个错误。“ab”是下一个参数,后面跟着“c”参数。您的参数也可以,但我可以接受一个答案:(感谢另一个答案对最后一个组不起作用,“&”没有完成。正则表达式对最后没有“&”的姓氏/值对不起作用。我认为@user2661518正在解析URL,而名称/值可以在参数行的末尾。@Robᵩ 是的,它不会以&
import urlparse
url = 'abcsdfs?a=name&b=&ab=fsdfsd&c=sfssf'
url = urlparse.urlsplit(url)
qs = url.query
qs = urlparse.parse_qs(qs, keep_blank_values=True)
print [qs['a'][0], qs['b'][0], qs['c'][0]]