Regex powershell-仅替换上一个匹配项
我需要帮助处理这个正则表达式。我得到一条如下的线。我想要像这样的东西 服务器名称:AdminServer正在运行Regex powershell-仅替换上一个匹配项,regex,powershell,replace,Regex,Powershell,Replace,我需要帮助处理这个正则表达式。我得到一条如下的线。我想要像这样的东西 服务器名称:AdminServer正在运行 服务器名称:服务服务器1正在运行 $rv="xxx ServerName: AdminServer RUNNING xxxx ServerName: ServicesServer1 RUNNING xxx" $rv -replace ".*(ServerName: [A-Za-z0-9]*.*[RUNNING|SHUTDOWN])",'$1' ServerName: Servi
服务器名称:服务服务器1正在运行
$rv="xxx ServerName: AdminServer RUNNING xxxx ServerName: ServicesServer1 RUNNING xxx"
$rv -replace ".*(ServerName: [A-Za-z0-9]*.*[RUNNING|SHUTDOWN])",'$1'
ServerName: ServicesServer1 RUNNING xxx
凭我现在的实力,我只赢了最后一场比赛
编辑:$rv="xxx ServerName: AdminServer RUNNING xxxx ServerName: ServicesServer1 RUNNING
$rv -replace ".*(ServerName: [A-Za-z0-9]*.*RUNNING|SHUTDOWN)",'$1'
给予
不是
编辑2:
结果我把这个简化了。字符串看起来更像这样:
$rv='XXX rtification Authority - G3,OU=(c) 2008 GeoTrust Inc. - For authorized use only,O=GeoTrust Inc.,C=US". The loading of the trusted certificate list raised a certificate parsing exception PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11.>
Successfully Connected to Node Manager.
ServerName: SasTTpcAdminServer
RUNNING
Successfully disconnected from Node Manager.
Connecting to Node Manager ...
Successfully Connected to Node Manager.
ServerName: XXXServicesServer1
RUNNING
Successfully disconnected from Node Manager.'
虽然这不一定是一种理想的方法,但在解决一些问题后,它将“起作用”:
[RUNNING | SHUTDOWN]
是一个字符计算器,而不是一个操作。将其切换到(?:运行|关机)
*
s匹配太过贪婪。改用*?
$rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'
注意,它与最后一位不匹配。。但是,可能有更好的解决方案(注意,这使用了前面讨论的修复和我自己的一些调整):
然后,我们可以将捕获组值映射为更简单的值:
$r | % { $_.Value }
# ->
# ServerName: AdminServer RUNNING
# ServerName: ServicesServer1 RUNNING
虽然这不一定是一种理想的方法,但在解决一些问题后,它将“起作用”:
[RUNNING | SHUTDOWN]
是一个字符计算器,而不是一个操作。将其切换到(?:运行|关机)
*
s匹配太过贪婪。改用*?
$rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'
注意,它与最后一位不匹配。。但是,可能有更好的解决方案(注意,这使用了前面讨论的修复和我自己的一些调整):
然后,我们可以将捕获组值映射为更简单的值:
$r | % { $_.Value }
# ->
# ServerName: AdminServer RUNNING
# ServerName: ServicesServer1 RUNNING
试试这个:
[regex]::Matches($rv, "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))") | select -expa value
或
试试这个:
[regex]::Matches($rv, "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))") | select -expa value
或
试试这个:
$rv -replace '[\s\S]*?(ServerName: \w+)[\s\S]*?((RUNNING|STOPPED).*\n)[\s\S]*?(?(?=ServerName)[\s\S]*?|.*$)', '$1 $2'
对我来说很好。:) 试试这个:
$rv -replace '[\s\S]*?(ServerName: \w+)[\s\S]*?((RUNNING|STOPPED).*\n)[\s\S]*?(?(?=ServerName)[\s\S]*?|.*$)', '$1 $2'
对我来说很好。:) 正确的[]是错误的-但它仍然是不正确的
$rv-替换“*(服务器名:[A-Za-z0-9]*.[RUNNING | SHUTDOWN])”,“$1”
运行xxx正确的[]是错误的-但它仍然是不正确的$rv-替换“*(服务器名:[A-Za-z0-9].*.[RUNNING | SHUTDOWN]),“$1”
运行xxx太棒了!我不知道我会那么复杂。你能给我指一下[regex]:matches的解释吗?它只是;也请参阅“新”输入,考虑诸如<代码> ^(ServNord:**)$ < /代码>,并使用我给你答案,即使@克里斯蒂安想出了一个线性衬里后,这是伟大的!我不知道我会那么复杂。你能给我指一下[regex]:matches的解释吗?它只是;也请参阅“新”输入,考虑像<代码> ^(ServNord:**)$ < /代码>,并使用我给你答案,即使@基督教后来出现了一个线性。