Skip to main content
 首页 » 编程设计

python之Ebuild 文件格式的正则表达式

2024年09月03日24xxx_UU

我正在尝试根据 File Naming Rules 解析 Ebuild 文件格式.

到目前为止,我想出了:

(?P<name>[a-z0-9_-]+)-(?P<major>[0-9]+)(\.(?P<minor>[0-9]+))?(\.(?P<micro>[0-9]+))?(?P<release>(_alpha|_beta))*(?P<status>(_pre|_rc\d+|_p\d+))(?P<revision>-r\d+)* 

它没有完成这项工作 ( Regex examples )。

我很不高兴,我的版本表达式在组匹配中包含 . 并且 release 在匹配中包含字符 _。此外,修订版 会查找“-r”字符而不是返回其自身的数字。

如何修复我的正则表达式?

请您参考如下方法:

您可以将分隔符放在命名组之前,而不是使用分隔符量化命名组模式,用可选的非捕获组包裹分隔符和命名组,并使用 ? 量词匹配 1或出现 0 次而不是 *(您不希望重复 release、alpha 等)。

所以模式可以是

pattern = r'''(?x)                     # Free spacing (re.X/re.VERBOSE) mode on 
^                                      # Start of string 
 (?P<name>[a-z0-9_-]+)                 # Name group: 1+ lowercase ASCII letters, digits, _ and - 
 -                                     # a - char 
 (?P<major>[0-9]+)                     # Major group: 1+ digits 
 (?:\.(?P<minor>[0-9]+))?              # . and Minor group: 1+ digits 
 (?:\.(?P<micro>[0-9]+))?              # . and Micro group: 1+ digits 
 (?:_(?P<release>alpha|beta))?         # _ and Release group: "alpha" or "beta" 
 (?:_(?P<status>pre|(?:rc|p)[0-9]+))?  # _ and Status group: "pre" or "rc" / "p" followed with 1+ digits 
 (?:-r(?P<revision>[0-9]+))?           # -r, Revision group: 1+ digits 
$                                      # End of string 
''' 

参见 regex demo