我在尝试从变量中分离出某个短语。我知道我可以做下面的事情来摆脱这个词之后的一切,但不知道如何做到这一点之前的一切:
$Trimthis -replace '(?<=elephant)(.\n|.)*'
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:
(?s)
SingleLine
.
\n
(…)
-replace
$1
@' No, there is no elephant in the room. '@ -replace '(?s)^.*(elephant.*$)', '$1'
参见this regex101.com page。输出:
elephant in the room.
q9yhzks02#
要删除第一次出现elephant之前的文本,可以使用带有非贪婪量词的lookahead,并让点匹配换行符,例如inline修饰符(?s)
$Trimthis -replace '(?s)^.*?(?=elephant)'
2条答案
按热度按时间j8ag8udp1#
正如圣地亚哥所建议的,你可以使用一个(积极的)look-ahead Assert(
(?=…)
):有关正则表达式的解释和使用它的能力,请参阅this regex101.com page注意,
(?s)
是SingleLine
.NET正则表达式选项的内联形式,这使得.
也匹配换行符(\n
)。或者,使用捕获组(
(…)
)捕获必须保留的部分,您可以在-replace
运算符的替换操作数中引用为$1
:参见this regex101.com page。
输出:
q9yhzks02#
要删除第一次出现elephant之前的文本,可以使用带有非贪婪量词的lookahead,并让点匹配换行符,例如inline修饰符
(?s)