regex 在PowerShell中删除变量中某个单词之前的所有文本

vvppvyoh  于 2023-03-24  发布在  Shell
关注(0)|答案(2)|浏览(116)

我在尝试从变量中分离出某个短语。
我知道我可以做下面的事情来摆脱这个词之后的一切,但不知道如何做到这一点之前的一切:

$Trimthis -replace '(?<=elephant)(.\n|.)*'
j8ag8udp

j8ag8udp1#

正如圣地亚哥所建议的,你可以使用一个(积极的)look-ahead Assert(?=…)):

@'
No, there is
no elephant
in the room.
'@ -replace '(?s)^.*(?=elephant.*$)'

有关正则表达式的解释和使用它的能力,请参阅this regex101.com page注意,(?s)SingleLine.NET正则表达式选项的内联形式,这使得.也匹配换行符(\n)。
或者,使用捕获组(…))捕获必须保留的部分,您可以在-replace运算符的替换操作数中引用为$1

@'
No, there is
no elephant
in the room.
'@ -replace '(?s)^.*(elephant.*$)', '$1'

参见this regex101.com page
输出:

elephant
in the room.
q9yhzks0

q9yhzks02#

要删除第一次出现elephant之前的文本,可以使用带有非贪婪量词的lookahead,并让点匹配换行符,例如inline修饰符(?s)

$Trimthis -replace '(?s)^.*?(?=elephant)'

相关问题