【问题标题】:PowerShell Regex get substring between 2 strings [duplicate]PowerShell Regex获取2个字符串之间的子字符串[重复]
【发布时间】:2017-10-03 04:32:27
【问题描述】:

我正在尝试使用 powershell 从字符串中获取子字符串。我想得到“=%7B”和“%”之间的字符串

my string = "onething=%7BABCDEFGHIJKLM%something=%7BNOPQRSTUVWXYZ%"

我使用了正则表达式 \=%7B([^%]+)\% 并且能够得到

"=%7BABCDEFGHIJKLM%""=%7BNOPQRSTUVWXYZ%"

但不是 2 个字符串中的值。这是怎么做到的?

谢谢

【问题讨论】:

  • Powersehll != Powershell

标签: regex powershell


【解决方案1】:

regex lookaround 很容易:

(?<=\=%7)[A-Z]+(?=%)

试试online

如果你在中间使用更开放的模式,你应该添加一个不贪婪的标志:

(?<=\=%7).+?(?=%)

像这样使用它:

$str="onething=%7BABCDEFGHIJKLM%something=%7BNOPQRSTUVWXYZ%"
$ret = [Regex]::Matches($str, "(?<=\=%7).+?(?=%)")
for($i = 0; $i -lt $ret.Count; $i++) {
    $ret[0].Value
}

您不需要使用捕获组,因为我的模式提供了完全匹配。


解释:

正面观察(?&lt;=%7) 断言 Regex 匹配字符 %7 的字面意思(区分大小写)

匹配下面列表中的单个字符[A-Z]+
+ 量词 - 匹配一次到无限次,尽可能多次,根据需要回馈(贪婪)
A-Z 介于 A 和 Z 之间的单个字符(区分大小写)

正向预测(?=%)
断言下面的正则表达式匹配: 匹配字符 % 字面意思

全局模式标志 g 修饰符:全局。所有匹配(第一次匹配后不返回)
U修饰符:不贪婪。默认情况下,匹配变得惰性。现在一个?跟随量词使其变得贪婪

【讨论】:

  • 好帖子!最近几天我一直在研究正则表达式环视。我可以推荐以下资源来帮助您开始使用 Regex:github.com/zeeshanu/learn-REGEX
【解决方案2】:

看起来您很接近...我根据您发布的内容进行猜测,因为您没有发布完整的工作代码来重现问题...

在 regex101.com 验证您的正则表达式后,我在 ISE 中运行了此程序。

$str="onething=%7BABCDEFGHIJKLM%something=%7BNOPQRSTUVWXYZ%"
$ret = [Regex]::Matches($str, "\=%7B([^%]+)\%")
$ret.Count
$ret[0].Groups[1].Value
$ret[1].Groups[1].Value

为我工作...

请注意,将来,请使用正确的语法发布代码,以改进对您的问题的回答……尤其是当它们变得更加技术性时,因为您的 PowerShell 问题无疑会变得如此。

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2015-06-24
    • 2019-10-13
    • 1970-01-01
    • 2013-09-14
    • 2015-02-18
    • 1970-01-01
    • 2015-05-10
    • 2019-12-20
    相关资源
    最近更新 更多