[英]Python regex not matching all patterns in string
我想匹配curl命令的标题模式,例如:
-H'键:值'
要么
-H“键:值”
此开关可以出现在字符串的中间或结尾。
我的模式:
>>> header_pattern = re.compile(' \-H (?:\'|\").+?:.+?(?:\'|\")(?:\s+|$)')
我的字符串:
>>> a = " -H 'Authorization: Bearer xxx' -H 'Content-Type: text/plain' "
现在,我尝试查找此模式的所有实例,但仅与第一个模式匹配。
>>> headers = header_pattern.findall(a)
>>> headers
[" -H 'Authorization: Bearer xxx' "]
为什么不使用argparse
模块而不是正则表达式:
import argparse
import shlex
parser = argparse.ArgumentParser()
parser.add_argument('command')
parser.add_argument('url')
parser.add_argument('-d', '--data')
parser.add_argument('-b', '--data-binary', default=None)
parser.add_argument('-H', '--header', action='append', default=[])
parser.add_argument('--compressed', action='store_true')
curl_command = "curl https://google.com -H 'Authorization: Bearer xxx' -H 'Content-Type: text/plain'"
tokens = shlex.split(curl_command)
parsed_args = parser.parse_args(tokens)
print(parsed_args.header)
打印['Authorization: Bearer xxx', 'Content-Type: text/plain']
。
(受uncurl
包启发)。
您可以使用此正则表达式匹配所有标头选项:
header_pattern = re.compile(r'-H\s*([\'"])(.+?)\1')
在-H
之前并不需要断言空格,但是您可以使用:
header_pattern = re.compile(r'(?<=\s)-H\s*([\'"])(.+?)\1')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.