You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式匹配括号内多字符的技术求助

匹配特定格式章节编号的正则表达式解决方案

需求说明

需要匹配字符串中类似E(1)、E(1)(a)、E(1)(a)(ii)这类格式的内容,具体测试场景如下:

测试输入

  • The paragraph E(1)
  • The paragraph E(1)(a)
  • The paragraph E(1)(a)(ii)
  • The paragraph E(1)(a)(ii) and paragraph G(1)(b)

期望输出

  • E(1)
  • E(1)(a)
  • E(1)(a)(ii)
  • E(1)(a)(ii)、G(1)(b)

原正则的问题

原正则表达式[A-Z]\(\d{1,3}\)\([a-z]\)存在以下缺陷:

  • 强制要求必须包含([a-z])部分,导致无法匹配仅E(1)这类基础格式
  • 无法匹配后续额外的多字母后缀(如(ii))

正确的正则表达式

使用以下正则表达式即可覆盖所有需求:

[A-Z]\(\d{1,3}\)(\([a-z]+\))*

正则规则解释

  • [A-Z]:匹配单个大写字母(如E、G)
  • \(\d{1,3}\):匹配括号包裹的1-3位数字(如(1)、(123))
  • (\([a-z]+\))*:匹配0次或多次括号包裹的小写字母序列(支持单个字母如(a),也支持多字母如(ii)、(xyz))

测试验证

以下是Python环境中的测试代码及结果:

import re

pattern = r"[A-Z]\(\d{1,3}\)(\([a-z]+\))*"

# 测试1
print(re.findall(pattern, "The paragraph E(1)"))
# 输出: ['E(1)']

# 测试2
print(re.findall(pattern, "The paragraph E(1)(a)"))
# 输出: ['E(1)(a)']

# 测试3
print(re.findall(pattern, "The paragraph E(1)(a)(ii)"))
# 输出: ['E(1)(a)(ii)']

# 测试4
print(re.findall(pattern, "The paragraph E(1)(a)(ii) and paragraph G(1)(b)"))
# 输出: ['E(1)(a)(ii)', 'G(1)(b)']

内容的提问来源于stack exchange,提问作者drsalt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:15:05