如何使用正则表达式匹配请求行?

时间:2014-08-04 09:56:38

标签: python regex

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

3 个答案:

答案 0 :(得分:4)

您使用[]来匹配特定字符集 例如[a-zA-Z]将匹配所有大写和小写字符。

对于您的问题,您必须使用群组

试试这个

re.compile('^(GET|POST|PUT|DELETE)\s+.+').match(request_line)

答案 1 :(得分:2)

这个[GET|POST|PUT|DELETE]实际上匹配一个角色,可能是角色类[]内的任何人。即,它将是GET ....或E

您的正则表达式就像(?:GET|POST|PUT|DELETE)(GET|POST|PUT|DELETE)一样,这意味着单词GETPOSTPUT或{{1} }。如果您不想捕获,请将单词放在非捕获组DELETE中。如果要捕获方法名称,请将它们放入捕获组(?:)

示例:

()

答案 2 :(得分:0)

re.compile('^(?:GET|POST|PUT|DELETE)\s+.*').match(request_line)

我们可以使用。* 代替。+