匹配模式的正则表达式

regex matching the pattern

有没有办法在python中写一个正则表达式来匹配以下格式的字符串:

feat(fix-validation): some texts (Aerogear-G1010)

feat$($fix-validation$)$:$some texts$($Aerogear-G1010$)

这里,$=表示可以出现零个或多个白色space

细分:

feat : 来自固定字符串子集的字符串 ['feat','fix','docs','breaking']

fix-validation : 最大 n 长度的字符串

some texts : 最大 m 长度的字符串

Aerogear-G1010 :前缀应始终为字符串 Aerogear- ,然后是最大 q 长度

的一些字母数字字符

注意:我们不能转义像():-这样的特殊字符,应该在与以下示例中所示的格式完全相同:

  1. feat(feat-new):组创建的新功能 (Aerogear-1234)
  2. docs(new docs): 在文件 repo (Aerogear-G1235) 上添加新文档
  3. 修复(修复警告):修复用户提出的问题 (Aerogear-P1230)

我只能使用 pattern: '^fix|docs|feat\s+\(' 将字符串与固定的字符串子集匹配。我无法在匹配的字符串后跟 (some texts) :

添加零个或多个 space

这能实现吗?提前谢谢你:)

从您的正则表达式 '^fix|docs|feat\s+\(' 中,\s+ 匹配任何白色 space 字符一次到无限次。这需要至少一个白色space字符。

改为:

^(feat|docs|fix|breaking) *\( *(.*?) *\) *: *(.*?) *\( *(.*?) *\)$

我使用了输入的 spaces ( ) 但是如果你想包含任何 space 字符你应该使用 \s 相当于 [\r\n\t\f\v ].


应该做你正在寻找的,你可以在这里看到每个部分在做什么:https://regex101.com/r/EsF8FF/4

我建议阅读那里的解释并阅读 re 模块的 python 文档:https://docs.python.org/3/library/re.html