request line definition:
request_line := request_method + spaces + any number of other characters
eg: some valid request lines:
GET /user/1
POST /users
PUT ABC
DELETE XYZ
所以我的问题是如何匹配请求行?我尝试了以下方法,但遗憾的是它不起作用。
re.compile('^[GET|POST|PUT|DELETE]\s+.+').match(request_line) # output None
答案 0 :(得分:4)
您使用[]
来匹配特定字符集
例如[a-zA-Z]
将匹配所有大写和小写字符。
对于您的问题,您必须使用群组
试试这个
re.compile('^(GET|POST|PUT|DELETE)\s+.+').match(request_line)
答案 1 :(得分:2)
这个[GET|POST|PUT|DELETE]
实际上匹配一个角色,可能是角色类[]
内的任何人。即,它将是G
或E
或T
....或E
。
您的正则表达式就像(?:GET|POST|PUT|DELETE)
或(GET|POST|PUT|DELETE)
一样,这意味着单词GET
或POST
或PUT
或{{1} }。如果您不想捕获,请将单词放在非捕获组DELETE
中。如果要捕获方法名称,请将它们放入捕获组(?:)
。
示例:强>
()
答案 2 :(得分:0)
re.compile('^(?:GET|POST|PUT|DELETE)\s+.*').match(request_line)
我们可以使用。* 代替。+