繁体   English   中英

Python正则表达式不匹配字符串中的所有模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM