圣经章节正则匹配问题:无法识别逗号后的单独章节
圣经章节正则匹配修复方案
修改后的正则表达式
(\d{1,2} ?)?([A-Za-z]+(?: [A-Za-z]+)*) (\d{1,3})(?::(\d{1,3})(?:-(\d{1,3}))?)?(?:, *(\d+(?::\d+(?:-\d+)?)?|(?:\d{1,2} ?)?[A-Za-z]+(?: [A-Za-z]+)* \d+(?::\d+(?:-\d+)?)?))*
修改说明
- 原问题出在末尾的
, (\S+)部分:\S+强制要求逗号后紧跟非空白字符,导致Hos 10:1-3, 8中逗号后的空格+章节号8无法被匹配。 - 调整后的末尾片段
, *(\d+(?::\d+(?:-\d+)?)?|(?:\d{1,2} ?)?[A-Za-z]+(?: [A-Za-z]+)* \d+(?::\d+(?:-\d+)?)?):, *允许逗号后有0个或多个空格,兼容带空格/不带空格的分隔格式;- 分两种匹配场景:
- 第一种
\d+(?::\d+(?:-\d+)?)?:匹配同一章下的单独章节号(如8)或节范围(如8-10); - 第二种
(?:\d{1,2} ?)?[A-Za-z]+(?: [A-Za-z]+)* \d+(?::\d+(?:-\d+)?)?:保留对跨书条目(如1 Peter 2:3)的匹配能力,支持数字开头的书名格式。
- 第一种
- 末尾加
*允许匹配多个逗号分隔的条目(如Hos 10:1-3, 8, 10-12)。
验证场景
- 可匹配:
Hos 10:1-3, 8、1 Peter 1:1-5、Gen 1:1, Exod 2:3、Matt 5:9, 11-13, 15
内容的提问来源于stack exchange,提问作者Jeremy Menicucci
相关产品推荐
相关产品推荐

