我有一个字符串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)"
,但没有用。
答案 0 :(得分:3)
您要的内容称为正数lookbehind(一种用于检查当前位置左侧是否存在某种模式的构造):
"(?<=_)(?<number>\d)"
^^^^^^
但是,似乎您只想在_shay
的第一位之前插入_
。 replace
操作最适合这里:
$str -replace '_(\d.*)', '_shay_$1'
结果:test_demo_shay_0.1.1
。
详细信息
_
-下划线(\d.*)
-捕获组#1:一个数字,然后到行尾的任何0+字符。替换模式中的$1
是捕获组#1匹配的内容。