【问题标题】:regex matching the pattern匹配模式的正则表达式
【发布时间】:2021-03-23 15:59:34
【问题描述】:

有没有办法在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 长度的字母数字字符

注意:我们不能对():-等特殊字符进行转义,格式应与以下示例完全相同: p>

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

我只能使用模式:'^fix|docs|feat\s+\(' 将字符串与字符串的固定子集进行匹配。我无法在匹配的字符串后添加零个或多个空格,后跟 (some texts) :

这可以实现吗?提前谢谢你:)

【问题讨论】:

  • 是的,可以实现。到目前为止,您尝试过什么?
  • 您应该更新您的问题以显示您到目前为止所做的尝试。您的示例与您的细分不一致,q 不固定。
  • @0x5453 我只能将第一个匹配字符串的模式与字符串的修复子集匹配:'^fix|docs|feat\s+。除此之外,到目前为止进展不大:(
  • @Alex 谢谢.. 我会在问题部分更新我目前取得的进展
  • @Alex 非常感谢。我将按照您回答部分的参考资料来了解您回答的正则表达式

标签: python regex python-re


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2016-04-20
    • 2014-09-15
    相关资源
    最近更新 更多