[英]How to match regex pattern only up to certain character
line =abcsdfs?a=name&ab=fsdfsd&c=sfssf
pattern = '\?a=(.+?)&'
match_pattern = re.search(pattern, line)
I get result as ?a=name&
and and match_pattern.group(1)
as name
我得到的结果是
?a=name&
和match_pattern.group(1)
作为name
But if I remove word name I don't get NONE return?但是如果我删除单词名称,我不会得到 NONE 回报?
line =abcsdfs?a=&ab=fsdfsd&c=sfssf
pattern = '\?a=(.+?)&'
match_pattern = re.search(pattern, line)
I get result as ?a=&ab=fsdfsd&
and match_pattern.group(1)
as &ab=fsdfsd
我得到的结果是
?a=&ab=fsdfsd&
和match_pattern.group(1)
是&ab=fsdfsd
How can I stop it to go further.我怎么能阻止它走得更远。 I mean how to get result None/ error if do
match_pattern.group(1)
我的意思是如果执行
match_pattern.group(1)
如何获得结果无/错误
Try this instead:试试这个:
pattern = '\?a=(.*?)&'
Note that .+?
请注意
.+?
matches 1 or more characters;匹配1 个或多个字符;
.*?
matches 0 or more characters.匹配0 个或多个字符。
Of course, if what you are trying to do is to match URL query strings, regex is the wrong tool.当然,如果您要做的是匹配 URL 查询字符串,那么 regex 是错误的工具。 Try the
urlparse
module:试试
urlparse
模块:
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]]
您应该匹配除“&”之外的所有符号:
pattern = '\?a=([^&]*)'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.