正则表达式提取多连字符包裹的含特殊字符文本的匹配问题
解决方案
问题分析
原正则表达式 (?<=-)[^-]+(?=) 的缺陷在于使用了 [^-]+,它会匹配到内容中第一个 - 就停止,导致无法提取包含内部连字符的完整内容。
修正后的正则表达式
写法一(正向预查+非贪婪匹配)
(?<=^-{2,})\s*(.*?)\s*(?=-{2,}$)
写法二(捕获组模式,更直观)
^-{2,}\s*(.*?)\s*-{2,}$
正则说明
^-{2,}:匹配行首的2个及以上连续连字符,准确定位内容的起始边界\s*:匹配内容前后的空白字符(可根据实际需求保留或移除)(.*?):非贪婪模式匹配任意字符,直到遇到行尾的连续连字符,避免过度截断内容-{2,}$:匹配行尾的2个及以上连续连字符,定位内容的结束边界- 正向预查版本的
(?<=...)和(?=...)用于定位边界但不捕获连字符本身
验证示例
对于输入行:
------- Start Check Data - (before measurement - may be cached data) ------------
使用修正后的正则,会完整提取出:Start Check Data - (before measurement - may be cached data)
内容的提问来源于stack exchange,提问作者Arpan Sarkar
相关产品推荐
相关产品推荐

