Python正则表达式-或在捕获组中间[重复]

Posted

技术标签:

【中文标题】Python正则表达式-或在捕获组中间[重复]【英文标题】:Python regex - OR in the middle of the capture group [duplicate] 【发布时间】:2020-12-11 13:55:12 【问题描述】:

我的代码目前如下所示:

stat_block = re.search(r"(CR\s+[0-9/]+\s+XP[\S\s]*?)SPECIAL ABILITIES|"
                       r"(CR\s+[0-9/]+\)\s+XP[.\S\s]*?)SPECIAL ABILITIES",
                       text)

它应该提取如下内容:

CR 1
XP 200
// ... more text here
SPECIAL ABILITIES

或类似的东西:

CR 1/2)
XP 200
// ... more text here
SPECIAL ABILITIES

问题是CR 后面的数字后的结束括号)。我想在捕获组中创建替代(OR,|)来捕获任何内容或 ),因为 ORing 两个长正则表达式读起来非常麻烦。那可能吗?或者我应该如何处理这个?

【问题讨论】:

【参考方案1】:

我想 [...] 不捕获任何内容或 ) 在捕获组中

对于可选匹配,\)? 有什么问题吗?

(CR\s+[0-9/]+\)?\s+XP[.\S\s]*)SPECIAL ABILITIES

【讨论】:

@OP,或者您可以按照字面意思进行操作,使用非捕获组(即,(?:\)|) = "a 右括号 OR nothing");无需在两个完整模式之间使用 OR。显然,\)? 在可读性方面已经足够并且更好。 为什么[.\S\s]* 中有一个点? @Toto - 因为我忘了删除它。 Tomalak - 谢谢,这正是我需要的!

以上是关于Python正则表达式-或在捕获组中间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:捕获重复捕获组的所有单个实例 [重复]

正则表达式 - 重复捕获组

正则表达式组捕获[重复]

正则表达式:如何在捕获单个组时匹配整个字符串 [重复]

.Net 正则表达式用捕获组替换重复出现的模式

c# 正则表达式捕获