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

4

我遇到了一个无法解决的正则表达式问题:

我的字符串是这样的:

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个回答

5

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

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

^[^:]+?(?=:)
  • ^ 匹配字符串的开头
  • [^:]+? 匹配一个或多个字符,不包括 :,且尽可能少地匹配
  • (?=:) 一个正向前瞻:冒号需要直接跟在上一个匹配后面

regex101 上的实时示例


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

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

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

regex101上的实时示例


使用正则表达式的PowerShell 2

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

在此处添加其他文本。更多文本:sdfvsdv

PowerShell控制台


2
也许可以多加一些上下文/解释,以说明为什么这种模式有效。 - Mathias R. Jessen
1
@MathiasR.Jessen 谢谢,刚刚添加了几行解释。 - ssc-hrep3
嗨 @ssc-hrep3,对我来说似乎不起作用:$test[0..2] -replace ('^[^:]+?(?=:)',"") y:这里还有一些文本我确实看到它在REGEX101上似乎有效,但在选择中仍然没有包括第一个“:”...(编辑:抱歉,我没有看到你的额外回复)话虽如此,它已经选择了比我得到的更多内容,哈哈! - Fredster
$Test[0] 返回的是字符串的第一个字符,而不是第一行。通过使用上述正则表达式,您无需将字符串分割为前三行,因为它只从字符串开头进行搜索。如果您仍然想将其分割为行并仅搜索前 n 行,则可以使用 ($Test -split "\r?\n")[0] - ssc-hrep3
好的,这对我来说很清楚:由于MainArray的长度是可变的,并且包含许多行(它是一个由独立字符串组成的数组),所以我无法将其合并为一个长字符串,因此如果我理解正确的话,正则表达式似乎不适用。然而奇怪的是,mainarray | gm -verbose 仍然告诉我它是一个SYSTEM.STRING(尽管它的行为像一个数组?!)。谢谢你:你的帮助非常棒,我会将其标记为已回答。 - Fredster
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接