正则表达式匹配模式

时间:2021-03-23 15:59:34

标签: python regex re

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

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

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

这里,$ = 表示可以存在零个或多个空格

细分:

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

fix-validation : 最大n长度

的字符串

some texts : 最大m长度

的字符串

Aerogear-G1010 : 前缀应该总是一个字符串 Aerogear- 之后是一些最大 q 长度的字母数字字符

注意:我们不能转义像 ( ) : - 这样的特殊字符,并且应该与如下例所示:

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

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

的匹配字符串后添加零个或多个空格

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

1 个答案:

答案 0 :(得分:1)

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

相反:

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

我使用了输入空格 ( ),但如果您想包含任何空格字符,您应该使用 \s,它相当于 [\r\n\t\f\v ]


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

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