如何在RegEx中检测数字前的字符

时间:2019-01-22 13:30:13

标签: regex powershell

我有一个字符串test_demo_0.1.1

我想在PowerShell脚本中在0.1.1之前添加一些文本,例如:test_demo_shay_0.1.1

我用RegEx成功检测到第一个数字并添加了文字:

$str = "test_demo_0.1.1"
if ($str - match "(?<number>\d)")
{
    $newStr = $str.Insert($str.IndexOf($Matches.number) - 1, "_shay")-
}
# $newStr = test_demo_shay_0.1.1

问题是,有时我的字符串在另一个位置包含数字,例如:test_demo2_0.1.1(然后插入效果不好)。

所以我想检测前面的字符是_的第一个数字,怎么办?

我尝试了"(_<number>\d)""([_]<number>\d)",但没有用。

1 个答案:

答案 0 :(得分:3)

您要的内容称为正数lookbehind(一种用于检查当前位置左侧是否存在某种模式的构造):

"(?<=_)(?<number>\d)"
 ^^^^^^

但是,似乎您只想在_shay的第一位之前插入_replace操作最适合这里:

$str -replace '_(\d.*)', '_shay_$1'

结果:test_demo_shay_0.1.1

详细信息

  • _-下划线
  • (\d.*)-捕获组#1:一个数字,然后到行尾的任何0+字符。

替换模式中的$1是捕获组#1匹配的内容。