基于PCRE的正则匹配需求:提取指定键后无前置空白的内容
正则匹配解决方案
给定目标文本:
COLOR1= Light Blue COLOR2= Dark Red
要实现传入COLOR1=时仅匹配Light Blue、传入COLOR2=时仅匹配Dark Red,同时去除等号后的前置空白,结合PCRE正则库(Nim语言基于此),可以采用以下方案:
核心正则表达式
针对单个键的匹配,使用:
(?<=COLOR1=)\s*([^\n]*)$
将其中的COLOR1=替换为COLOR2=即可匹配对应的值。
正则解释
(?<=COLOR1=):正向零宽断言,确保当前位置前是目标键的等号部分,不会被计入匹配结果\s*:匹配等号后所有前置空白字符(包括空格、制表符),直接跳过这些空白([^\n]*)$:捕获从空白结束位置到行尾的所有内容([^\n]*避免跨行匹配,解决换行问题),捕获组1即为需要的目标文本
Nim语言示例代码
如果需要动态传入键名,可通过字符串拼接生成正则(注意转义特殊字符):
import re proc getConfigValue(configText: string; key: string): string = let escapedKey = re.escape(key) let regexPattern = "(?<=" & escapedKey & "=)\\s*([^\\n]*)$" let matchResult = re.match(configText, regexPattern) if matchResult.isMatch: result = matchResult.group(1) else: result = "" # 测试使用 let config = """COLOR1= Light Blue COLOR2= Dark Red""" echo getConfigValue(config, "COLOR1") # 输出: Light Blue echo getConfigValue(config, "COLOR2") # 输出: Dark Red
内容的提问来源于stack exchange,提问作者Drackich
相关产品推荐
相关产品推荐

