regex - 这个正则表达式模式有什么问题?

标签 regex python-2.7

我正在尝试一种简单的正则表达式模式。但它的行为很奇怪。

re.findall('ABC\-\d{2}\-\d{3,5}(\[[A-Z]\])?', 'ABC-01-1234[Z],ABC-12-5678')

输出始终是:

['[Z]']

而我想要两个字符串,即 ABC-01-1234[Z],ABC-12-5678 作为我的匹配模式。 [Z] 是可选的。不知道为什么 ? 无法正常工作。

最佳答案

将您的正则表达式更改为:

re.findall('(ABC\-\d{2}\-\d{3,5}(?:\[[A-Z]\])?)', 'ABC-01-1234[Z],ABC-12-5678')

围绕整场比赛进行分组(...)。以及您可能匹配的非捕获组 (?:...)

在 JS 中测试(不确定是否适用于 Python):

'ABC-01-1234[Z],ABC-12-5678'.match(/(ABC\-\d{2}\-\d{3,5}(?:\[[A-Z]\])?)/g); // ["ABC-01-1234[Z]", "ABC-12-5678"]

关于regex - 这个正则表达式模式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043484/

相关文章:

mysql - Python 使用 MySQL 连接器卡在 fetchall 上

python - 像字典一样索引 NumPy 数组

Java 正则表达式 : Match any words word and must contain a certain work but except one word

python - 捕获组和环视

python-2.7 - 合并两列 pandas 数据框

python - dll在使用memset时导致Python崩溃

python - 仅从 python 中的 td 选择价格值

regex - Sed 替换文本

java使用正则表达式从字符串中删除模式

python - 使用带有 View 函数的 webapp2 微框架时如何呈现模板?