C# Powershell正则表达式,用于从日志文件中的行中提取圆括号之间的字符串
这是日志文件中的一行:C# Powershell正则表达式,用于从日志文件中的行中提取圆括号之间的字符串,c#,.net,regex,powershell,C#,.net,Regex,Powershell,这是日志文件中的一行: $line = 'to devices Headset Earphone (Some Device)' 我只需要一行正则表达式的结果(如果可能): 我让它分两行工作: $InsideLoopLine = [regex]::Matches($Line, '^.*to devices Headset.*$') [regex]::Matches($InsideLoopLine,'(?<=\().*(?=\))') 结果: to d
$line = 'to devices Headset Earphone (Some Device)'
我只需要一行正则表达式的结果(如果可能):
我让它分两行工作:
$InsideLoopLine = [regex]::Matches($Line, '^.*to devices Headset.*$')
[regex]::Matches($InsideLoopLine,'(?<=\().*(?=\))')
结果:
to devices Headset Earphone (Some Device
Some Device
新信息2
代码:
结果:
to devices Headset Earphone (Some Device
Some Device
$Query=[regex]::匹配($Line,“到设备耳机\(.*)”)
$Query.Groups[1]。值
您可以对包含捕获组的模式使用-match
,然后,一旦存在匹配,您可以使用$matches[1]
访问期望值:
PS C:\Users\admin> $line = 'to devices Headset Earphone (Some Device)'
PS C:\Users\admin> $s -match '\bto devices Headset.*?\(([^()]+)' | Out-Null
PS C:\Users\admin> $matches[1]
Some Device
请参阅.NET正则表达式兼容测试站点上的
详细信息
-将整个单词\b至设备耳机
,然后空格和至
文本设备耳机
-除换行符以外的任何0个或更多字符,尽可能少*?
-a\(
字符(
-捕获组1:除([^()]+)
和(
以外的任何一个或多个字符)
PS C:\Users\admin> $matched = $s -match '\bto devices Headset.*?\(([^()]+)'
PS C:\Users\admin> if ($matched) { Write-Host $matches[1] }
带有[regex]的可选项:匹配:
PS C:\Users\admin> $result = [regex]::Match($line, '(?<=\bto devices Headset.*?\()[^()]+').value
PS C:\Users\admin> $result
Some Device
PS C:\Users\admin>$result=[regex]::Match($line),(?您可以运行$s-Match'\b到设备头戴式耳机。*?\([^()]+),
然后结果将在$matches[1]中
$s
是您的代码中的$line
。无法实现此功能,请查看新信息1:@WiktorStribiżewI添加了一个答案并抵消了否决票。我理解,非常感谢您提供的信息,但我需要使用:[regex]::Match刚刚使用了您的方式和Wiktor的方式相结合,请查看新信息2
PS C:\Users\admin> $result = [regex]::Match($line, '(?<=\bto devices Headset.*?\()[^()]+').value
PS C:\Users\admin> $result
Some Device