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
相关产品推荐
相关产品推荐

