如何用单个正则表达式同时解析单行多行数据并兼容空白符差异
解决方案
核心正则表达式
需开启多行匹配模式,兼容空格、制表符混合场景,同时适配制表符按4个空格计算的IDE规则:
--[ \t]+(\w+[ \t]+\[.+?\][ \t]*=.+?)(?:\n--[ \t]{3,}.+)*
逻辑拆分
--[ \t]+:匹配注释开头的--,后续至少跟1个水平空白(空格、制表符均支持)(\w+[ \t]+\[.+?\][ \t]*=.+?):匹配参数定义行的核心内容,包含参数名、单位标识、等于号和首行描述(?:\n--[ \t]{3,}.+)*:非捕获组匹配可选的续行:换行后仍以--开头,后续跟至少3个水平空白(单个制表符等价4个空格,天然满足长度要求),*标识续行可出现0次或多次:- 续行出现0次时匹配单行定义
- 续行出现≥1次时匹配多行定义
扩展版本(带命名分组)
如果需要直接提取参数名、单位、描述字段,可以使用带命名分组的版本:
--[ \t]+(?<param_name>\w+)[ \t]+\[(?<unit>.+?)\][ \t]*=[ \t]*(?<desc>.+?)(?:\n--[ \t]{3,}(?<desc_append>.+))*
内容的提问来源于stack exchange,提问作者Eddie Mossberg
相关产品推荐
相关产品推荐

