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

如何用正则表达式匹配冒号包裹字符串及含单冒号的剩余片段?

PowerShell正则匹配解决方案

正确的正则表达式

(?::\S+:(?!\S)|[^:]*(?::(?!\S)|$))

使用示例

$targetStr = "This is a :key: and this is :anotherKey: but this: is normal text."
$pattern = [regex]"(?::\S+:(?!\S)|[^:]*(?::(?!\S)|$))"
$matchResults = $pattern.Matches($targetStr)
# 遍历输出匹配结果
$matchResults.Value

执行后会得到你需要的匹配结果:

  1. This is a
  2. :key:
  3. and this is
  4. :anotherKey:
  5. but this: is normal text.

正则逻辑说明

  • :\S+:(?!\S):精准匹配被冒号包裹的非空白字符序列(如:key:),(?!\S)确保该序列后接空白字符或字符串结尾,避免误匹配包含冒号的其他内容。
  • [^:]*(?::(?!\S)|$):匹配任意非冒号字符,直到遇到**单独的冒号(后接空白/结尾)**或字符串结尾,这样就能把包含单独冒号的整段文本作为一个匹配项,不会拆分冒号。

对之前尝试的问题分析

  • 表达式(:\S+:(?!\S)|[^:]+):[^:]+会在遇到第一个冒号时停止匹配,导致this:里的冒号被孤立,无法将 but this: is normal text.作为整体匹配。
  • 表达式(:\S+:(?!\S)|[^:]+|:):将单独的冒号单独拆分为一个匹配项,不符合整段文本匹配的要求。
  • 表达式(:\S+:(?!\S)|[^:]+(:|$)):[^:]+(:|$)逻辑错误,会把每个冒号都作为匹配终点,导致文本被过度拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:59:56