You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配空白分隔键值对:支持值含空格且去首尾空白

修正正则表达式以去除值的尾部空白

需要从文本行中分离键和值组件,规则如下:

  • 第一个完整单词为键,键前可存在任意空白(空格/制表符,不含换行)
  • 键后接任意数量空白,之后所有内容为值(可包含空白,但需去除尾部空白)
  • 值为空时,第二个捕获组为null

现有正则表达式(?<key>\w+)(?:[ \t]*(?<value>.*))存在问题:会保留值的尾部空白,例如输入____people_________john_jim_jen_josh____时,得到的值为john jim jen josh ,不符合期望。


修正后的正则表达式

^[ \t]*(?<key>\w+)(?:[ \t]+(?<value>.*?[^\s]))?$

正则解释

  • ^:行首锚定,确保匹配从行的开头开始
  • [ \t]*:匹配键前的任意数量空格或制表符,符合键前可存在任意空白的规则
  • (?<key>\w+):捕获命名组key,匹配第一个完整单词作为键
  • (?:[ \t]+(?<value>.*?[^\s]))?:可选的非捕获组,处理值部分:
    • [ \t]+:匹配键后至少一个空白,区分键后有值和无值的情况
    • (?<value>.*?[^\s]):非贪婪匹配所有字符直到最后一个非空白字符,自动去除值的尾部空白
    • ?:标记整个组为可选,当键后只有空白或无内容时,该组不匹配,value组为null
  • $:行尾锚定,确保匹配覆盖整行内容

测试验证

针对给出的测试用例(下划线代表空格):

输入文本捕获的key捕获的value
keykeynull
key___keynull
___key___keynull
key___I_am_a_valuekeyI am a value
__key___I_am_a_valuekeyI am a value
__key______I_am_a_value_______keyI am a value
____people_________john_jim_jen_josh____peoplejohn jim jen josh

所有测试用例均符合预期。

另一种等价写法(使用反向断言确保行尾无空白):

^[ \t]*(?<key>\w+)(?:[ \t]*(?<value>.*?))?(?<![ \t])$
  • (?<![ \t]):反向否定断言,确保行的结尾不是空格或制表符,从而自动排除值的尾部空白

内容的提问来源于stack exchange,提问作者oblivioncth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:57:36