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

PCRE2正则表达式需求:将特定单词后的空格替换为短横线

PCRE2正则替换解决方案

核心思路

要实现需求,得先精准匹配第一个被空格包围的VAN/VON/DE,再把这个位置之后的所有空格换成短横线-。

两种可行方案

1. 编程环境用回调函数(比如PHP)

匹配正则:

^(.*?\b(?:VAN|VON|DE)\b)(.*)$

逻辑是把字符串拆成两部分:第一部分是开头到第一个目标词的内容,第二部分是目标词之后的所有内容。替换时保留第一部分,把第二部分里的空格全换成-。

PHP示例代码:

$input = "CAROLINE VAN OOSTEN DE WINKEL";
$output = preg_replace_callback(
    '/^(.*?\b(?:VAN|VON|DE)\b)(.*)$/',
    function($matches) {
        return $matches[1] . str_replace(' ', '-', $matches[2]);
    },
    $input
);

2. 命令行工具用纯正则替换(比如pcre2-replace)

匹配正则:

^(?:(?!.*\b(?:VAN|VON|DE)\b).*$)(*SKIP)(*FAIL)|(\G(?!^)|^(.*?\b(?:VAN|VON|DE)\b))\s

替换为:

$1-

这个正则先跳过没有目标词的行,再从第一个目标词的位置开始,把后续每个空格替换成-。

关键细节说明

  • \b(?:VAN|VON|DE)\b:用单词边界\b确保目标词是独立的,不会匹配VANHOVEN这种包含目标词的复合词。
  • 方案1简单直接,适合编程场景;方案2纯靠正则,适合命令行批量处理。

测试结果

套用到你给的示例文本上,完全符合预期:

  • HENRIETTA VON DER GRAAF → HENRIETTA VON-DER-GRAAF
  • ANNEKA VANHOVEN BAKKER → 无匹配,保持原样
  • JOHN WILKINSON SMITH → 无匹配,保持原样

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:52:37