匹配所有出现的可选前缀/后缀[重复]

Posted

技术标签:

【中文标题】匹配所有出现的可选前缀/后缀[重复]【英文标题】:Matching all occurrences with optional prefix/suffix [duplicate] 【发布时间】:2022-01-24 03:53:18 【问题描述】:

我有以下正则表达式:

(\+|-|\^)?[a-z\d]+

我正在尝试匹配任何字母数字字符序列,其前面可能有也可能没有+-,后面可能有^ 和一系列数字。但是,这不会产生我想要的结果。

例如下面的代码:

import re
r = re.findall(r'(\+|-|)?[a-z\d]+(\^\d+)?', '4x+5x-2445y^56')

返回结果[('', ''), ('+', ''), ('-', '^56')],但我希望它返回['4x', '+5x', '-2445y^56']

我做错了什么?

【问题讨论】:

【参考方案1】:

您在尝试使用可选的? 时引入了两个捕获的组,这将由findall 返回。您可以使用?: 使它们不被捕获,同时仍然能够将某些模式组合在一起:

r = re.findall(r'[+-]?[a-z\d]+(?:\^\d+)?', '4x+5x-2445y^56')
r
['4x', '+5x', '-2445y^56']

【讨论】:

以上是关于匹配所有出现的可选前缀/后缀[重复]的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的前缀与后缀[重复]

POJ 3693 Maximum repetition substring(后缀数组+ST表)

hiho #1449 : 后缀自动机三·重复旋律6

扩展KMP算法

leetcode 47. 全排列 II---回溯篇6

JavaScript中的可选参数[重复]