我需要这个正则表达式的帮助。我得到一个像下面的字符串。我想要像
这样的东西 ServerName:AdminServer RUNNING
ServerName:ServicesServer1 RUNNING
$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'
给出
ServerName: ServicesServer1 RUNNING xxx
不是
ServerName: AdminServer RUNNING
ServerName: ServicesServer1 RUNNING
EDIT2: 事实证明我已经简化了这一点。字符串看起来更像是这样:
$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.'
答案 0 :(得分:2)
试试这个:
[regex]::Matches($rv, "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))") | select -expa value
或
($rv | select-string -Pattern "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))" -AllMatches ).matches | select -expa value
答案 1 :(得分:1)
虽然这不一定是一种理想的方法,但在解决一些问题后它会“起作用”:
[RUNNING|SHUTDOWN]
是一个字符calss,而不是aliteration。将其切换为(?:RUNNING|SHUTDOWN)
.*
匹配过于贪婪。请改用.*?
。
决赛:
$rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'
注意它与最后一位不匹配..但是,可能有更好的解决方案(请注意,这使用了之前讨论的修复和我自己的一些调整):
$r = [regex]::matches($rv,"(ServerName:.*?\w+.*?(?:RUNNING|SHUTDOWN))")
$r[0].Value
# -> ServerName: AdminServer RUNNING
然后我们可以将捕获组值映射到更简单的东西:
$r | % { $_.Value }
# ->
# ServerName: AdminServer RUNNING
# ServerName: ServicesServer1 RUNNING
答案 2 :(得分:0)
试试这个:
$rv -replace '[\s\S]*?(ServerName: \w+)[\s\S]*?((RUNNING|STOPPED).*\n)[\s\S]*?(?(?=ServerName)[\s\S]*?|.*$)', '$1 $2'
对我来说很好。 :)