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

PowerShell正则命名组如何捕获任意单词数量的姓名?

问题分析与解决方案

你的问题核心是原正则表达式中(?<Name>\w+\s\w+)仅能匹配两个空格分隔的单词,无法适配多词姓名。要实现通用匹配,关键是利用字符串的固定结构——姓名后必然紧跟, Age:分隔符,通过以下两种方式即可解决:


方案1:正向预查(推荐)

使用正向预查精准定位姓名的结束位置,确保匹配内容截止到, Age:之前,且不会包含该分隔符。修改后的正则如下:

$pop = New-Object -ComObject wscript.shell
$string = "John Quincey Adams, Age: 204, Email: jqa@example.com"
# 适配任意长度姓名的正则表达式
$regex = '(?<Name>.+?)(?=, Age:),\sAge:\s(?<Age>\d+),\sEmail:\s(?<Email>[^\s]+)'
if ($string -match $regex) {
    $name = $matches['Name']
    $age = $matches['Age']
    $email = $matches['Email']
    $pop.popup("Name: $name`nAge: $age`nEmail: $email",5,"Success",4096)
} else {
    $pop.popup("No Matches found.",4,"Oh Oh",4096)
}
Exit
  • .+?:非贪婪匹配任意字符,避免过度匹配后续内容
  • (?=, Age:):正向预查,确保匹配内容后紧跟, Age:标识

方案2:匹配第一个逗号前的内容

如果你的姓名场景中绝不会包含逗号,可以直接匹配所有非逗号字符,直到遇到第一个逗号:

$regex = '(?<Name>[^,]+),\sAge:\s(?<Age>\d+),\sEmail:\s(?<Email>[^\s]+)'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:28:10