首页 > 解决方案 > Python - 字符串/正则表达式匹配

问题描述

我正在尝试匹配以下内容以匹配传入的动态 API 路径。这是一个精确的字符串比较,但与通配符相关的传入字符串位置*应该被忽略并匹配,因为它可以是任何东西。

/v1/*/test应该匹配 /v1/jnjnjnjn/test 但不应该匹配/v0/knknkk/test/test

/v1/\*/test/\* 应该匹配 /v1/niniiuhi/test/njnjnj 但不应该匹配/v1/niniiuhi/test/njnjnj/knknkmkm

我尝试了以下。

re.search('v1/.*/test', 'v1/vhvhv98988/test/test') 

但它同时适用于v1/njnjnj/testv1/njnjnj/test/test

任何帮助将不胜感激?提前致谢

标签: pythonregexstringmatch

解决方案


如果*应该只匹配单个组件,我们需要/从匹配中排除,或者特别包括那些允许的字符。

  • re.search(r'^/v1/[^/]*/test$', '/v1/jnjnjnjn/test')/将匹配通配符组件中除 a 之外的任何内容。
  • re.search(r'^/v1/[a-z0-9_-]*/test$', '/v1/jnjnjnjn/test')将匹配通配符组件中的小写字母、数字、下划线和破折号。

通常第二种选择往往更安全,但它确实取决于您的要求。

在这两种情况下,除非您确实想要搜索子字符串,否则您应该^在开头和结尾锚定您的搜索。$

作为一个通用工具,像https://regex101.com/这样的网站(有很多)可以通过解释正在发生的事情并立即显示结果来帮助开发正则表达式。


推荐阅读