如何使用正则表达式删除powershell中的部分字符串

时间:2017-01-30 11:22:30

标签: regex powershell

我正在努力解决一个我无法弄清楚的正则表达式:

我的字符串就像这样

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)

1 个答案:

答案 0 :(得分:3)

正则表达式1 (不包括冒号)

您可以使用此正则表达式:

^[^:]+?(?=:)
  • ^匹配字符串的开头
  • [^:]+?匹配除:以外的一个或多个字符,字符尽可能少
  • (?=:)一个积极的前瞻:冒号需要在上一场比赛后直接进行

Live example on regex101

正则表达式2 (包括冒号)

如果你想匹配冒号和下一个空格,你也可以使用这个正则表达式:

^[^:]+?:\s*
  • :代替(?=:)包含匹配中的冒号
  • \s*匹配尽可能多的空白字符(0个或更多空格字符)

Live example on regex101

使用Regex 2的PowerShell

$test="[sudo] password for user: other text here. even more text: sdfvsdv"
$test -replace "^[^:]+?:\s*"
  

其他文字在这里。更多文字:sdfvsdv

powershell console