Este código funciona bem
$pop = New-Object -ComObject wscript.shell
$string = "John Adams, Age: 204, Email: [email protected]"
# Regular expression pattern with named groups
$regex = '(?<Name>\w+\s\w+),\sAge:\s(?<Age>\d+),\sEmail:\s(?<Email>[^\s]+)'
# Apply the regex match
if ($string -match $regex) {
# Access the groups using automatic variable $matches
$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
Mas se eu alterar a string para começar com John Quincey Adams, o grupo de nomes retornará apenas Quincey Adams. Sei que poderia adicionar um \w+\s extra, mas existe uma maneira de capturar um nome com qualquer número de palavras para o grupo em um sentido genérico?
Você pode adicionar um grupo opcional de não captura
(?:\s\w+)*
no seuName
grupo de captura, veja: https://regex101.com/r/itimND/1 .Talvez seja mais fácil se você analisar a string por divisão: