Scan text with regex in PowerShell
24 April, 2022
The named group capture (?<name>exp) in a regex is an easy way to scan content. In this example, to get the text enclosed in quotes in a string. This is how it is done in PowerShell:
# Get the text enclosed in quotes.
[string]$text = 'This is an "example text".'
[string]$textRegex = '\"(?<Text>.*?)\"'
if ($text -match $textRegex) {
$matches['Text']
}
This outputs
example text
Or split a formatted string into parts. For example the assignment structure 'id=value':
# Parse the id and value of the text.
[string]$text = ' id123 = abc '
[string]$idValueRegex = "^\s*(?<id>\w+?)\s*=\s*`"?(?<value>.+?)`"?\s*$"
if ($text -match $idValueRegex) {
"id=$($matches['id']), value=$($matches['value'])"
}
This outputs
id=id123, value=abc
Or parse a pattern, for example the content of each bracket in " abc { 123 } { def } 456 {xyz}"
[string]$text = " abc { 123 } { def } 456 {xyz}"
[string]$bracketRegex = "[{]\s*(?<Text>.*?)\s*[}]"
([regex]$bracketRegex).Matches($text) | % {
[System.Text.RegularExpressions.Group]$match = $_
[string]$value = $match.Groups["Text"].Value
$value
}
This outputs
123
def
xyz