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正则表达式-或在捕获组中间[重复]的主要内容,如果未能解决你的问题,请参考以下文章