Skip to main content
 首页 » 编程设计

python之正则表达式之使用 * 和一组字符

2025年05月04日28me-sa

我是正则表达式的新手,遇到了一个我无法弄清楚的问题:

我正在尝试匹配一组以任意数量的 A-Z、0-9 和 _ 字符开头的字符,这些字符可以选择后跟包含在一组括号中的数字,并且可以与原始字符分开由空格(或不空格)组成的字符串

这应该找到的示例:

_ABCD1E 
_123FD(13) 
ABDF1G (2) 

这是我当前的正则表达式:

[A-Z_0-9]+\s*\({0,1}[\d]*\){0,1} 

它发现一切都很好,但如果我有以下情况,则存在问题:

_ABCDE ) 

它应该只抓取 _ABCDE 而不是“)” 但它目前抓取 '_ABCDE )'

如果整个模式不存在,有什么方法可以获取 (#) 但不获取额外的字符?

如果可能,请解释语法,因为我的目标是学习,而不仅仅是得到答案。

回答:以下代码可以满足我目前的需要:

[A-Z_0-9]+(\s*\([\d]+\)){0,1} 
# or, as has been mentioned, the above can be simplified 
# and cleaned up a bit to be 
[A-Z_0-9]+(\s*\(\d+\))? 
# The [] around \d are unnecessary and {0,1} is equivalent to ? 

在 (#) 模式周围添加括号允许使用 ?或整个模式上的 {0,1}。我还将 [\d]* 更改为 [\d]+ 以确保括号内至少有一个数字。

感谢大家的快速回答!

请您参考如下方法:

您的正则表达式表示每个括号(打开和关闭)可能独立存在,也可能不存在。相反,您应该说 number-enclosed-in-parens 可能存在也可能不存在:

(\([\d]*\)){0,1} 

请注意,这允许括号中没有任何内容;这就是你的正则表达式所说的,但我不清楚你真正想要的是什么。