我正在努力解决一个我无法弄清楚的正则表达式:
我的字符串就像这样
Y
[sudo] Password for user: Other Text here
even more text here: with more text
我的目标是从第一行选择所有文本,包括第一行':',并将其替换为空。
问题是前两行可能存在,也可能不存在,它仍然需要选择文本,包括第一次出现':'
我的最终结果如下:
Other Text here
even more text here: with more text
这就是我得到的,但现在我被卡住了:
$Test[0..3] -replace ('[a-zA-Z]+\w\:*\s')
但这留下了第0行和第1行,也没有摆脱[sudo] :(
希望正则表达式可以给我一些见解:)。
修改的 关于实际字符串的更多信息(非常长且包含unix日志文件):
C:\> $MainArray
y
[sudo] password for User: 1485673353 1 33412 2 appxxx 1801152 1801047 0 appxxx bptm image copy is not ready, retry attempt: 6 of 500 o
bject is busy, cannot be closed
1485673354 1 33412 2 appxxx 1801153 1801047 0 appxxx bptm image copy is not ready, retry attempt: 6 of 500 object is busy, cannot be closed etc. etc.
尝试第一个答案: C:> $ MainArray -replace('^ [^:] +?:\ s *')
y
1485676476 1 4 4 appxxx 1801540 1801213 0 appxxx bptm successfully wrote backup id appxxx_1485671817, copy 1, fragment 17, 51200000
它以某种方式不会删除前两行(y和RETURN)
答案 0 :(得分:3)
您可以使用此正则表达式:
^[^:]+?(?=:)
^
匹配字符串的开头[^:]+?
匹配除:
以外的一个或多个字符,字符尽可能少(?=:)
一个积极的前瞻:冒号需要在上一场比赛后直接进行如果你想匹配冒号和下一个空格,你也可以使用这个正则表达式:
^[^:]+?:\s*
:
代替(?=:)
包含匹配中的冒号\s*
匹配尽可能多的空白字符(0个或更多空格字符)$test="[sudo] password for user: other text here. even more text: sdfvsdv"
$test -replace "^[^:]+?:\s*"
其他文字在这里。更多文字:sdfvsdv