如何将多优先级的换行起始问题分割正则合并为单个高效表达式?
正则表达式合并方案
针对你的需求,我们可以构建一个单个正则表达式,既满足开头为\n、结尾为\s+的约束,又能匹配所有指定模式,同时避免误匹配字符串中间的内容。
最终正则表达式
\n(?:(?:Q\.?|Question|Problem:?|Example|EXAMPLE)\s*\d+\.?|(?:Q\.|Question|Problem:?|Example|EXAMPLE)|[A-Za-z]\d+\.|\d+\.|\d+)\s+
表达式拆解说明
\n:严格匹配开头的换行符,确保只匹配行首的模式,避免字符串中间的误匹配(?:...):非捕获组,用于分组而不保存匹配结果,提升匹配效率- 各个分支按优先级覆盖所有需求模式:
(?:Q\.?|Question|Problem:?|Example|EXAMPLE)\s*\d+\.?:匹配Q <NUM>.、Q <NUM>、Q.<NUM>.、Question <NUM>、Problem <NUM>、Example <NUM>等带编号的前缀(?:Q\.|Question|Problem:?|Example|EXAMPLE):匹配Q.、Problem:、<Example>、<EXAMPLE>等无编号的前缀[A-Za-z]\d+\.:匹配<Alphabet><Number>.(如A1.、b2.)\d+\.:匹配<NUM>.(如1.、123.)\d+:匹配<NUM>(如1、123)
\s+:严格匹配结尾的一个或多个空白字符,符合需求约束
测试验证
用你提供的测试字符串测试该正则,会精准匹配以下行首模式:
\nQ.1.\nQ.1.
完全不会误匹配字符串中间的内容,同时覆盖了所有指定的模式类型,且仅需一次正则匹配即可完成,效率远高于循环多个正则的方案。
内容的提问来源于stack exchange,提问作者Deshwal
相关产品推荐
相关产品推荐

