我正在尝试在 Python 中编写正则表达式模式来捕获两个组,其中第二组是可选的,但我希望这些组保持不同。
以下是我想要匹配的可能模式的示例:
案例1:
1.2.1 Mickey Mouse (3-400-1-Z)
在某些情况下,括号及其内容会丢失,即: 案例2:
1.2.1 Mickey Mouse
这是我当前的正则表达式:
1\.2\.\d\s+(.*)(?:\s*\((\d+-\d+-\d+-[A-Z])\))
这创建了我想要的组,但如果存在情况 2,则它不匹配。另外,如果我添加一个“?”使第二组可选,它只是将我想要的组合并为一个(即,将
Mickey Mouse (3-400-1-Z)
作为组 1 返回)
那么,如何在 Python 中创建一个正则表达式来正确匹配这两个组,同时保持第 2 组可选且独立于第 1 组?有没有办法让可选组正常工作而不合并到组1?
当您添加“?”时将第二组设置为可选,您的组 1 将尽可能匹配(请参阅Greedy 或 Lazy)。因此,在第 1 组中添加一个“?”这样
(.*?)
就会使其匹配尽可能少。 $
进行匹配,直到行尾。1\.2\.\d\s+(.*?)(?:\s*\((\d+-\d+-\d+-[A-Z])\))?$