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