Regex Powershell正则表达式仅替换首次命中

Regex Powershell正则表达式仅替换首次命中,regex,powershell,Regex,Powershell,我试图在使用PowerShell时,使用正则表达式替换一次命中后的第一个字符 不管我怎么努力,我似乎都无法使它起作用。下面是我要说的: 代码: $info = 'AB/F/*ZXCVBN/MTF/ ---' $regex = [REGEX]'/*' $regex.Replace($info,"/C",1) $regex /CAB/F/*ZXCVBN/MTF/ --- 输出: $info = 'AB/F/*ZXCVBN/MTF/ ---' $regex = [REGEX]'/*' $re

我试图在使用PowerShell时,使用正则表达式替换一次命中后的第一个字符

不管我怎么努力,我似乎都无法使它起作用。下面是我要说的:

代码:

$info = 'AB/F/*ZXCVBN/MTF/ ---'

$regex = [REGEX]'/*'
$regex.Replace($info,"/C",1)

$regex
/CAB/F/*ZXCVBN/MTF/ ---
输出:

$info = 'AB/F/*ZXCVBN/MTF/ ---'

$regex = [REGEX]'/*'
$regex.Replace($info,"/C",1)

$regex
/CAB/F/*ZXCVBN/MTF/ ---
我只是想用
/C
替换表达式中的
/F
,但每次都失败了

我正在使用
/*
,因为我真的不知道在第一个
/
之后会找到什么字符,但这正是我想要在一天结束时替换的字符


我很确定这将非常简单,但正如您所看到的,我对正则表达式还不够熟悉。

您对正则表达式有误解。它不是通配符

正则表达式中的星号表示捕获表达式中前面的0个或多个项。 正则表达式中的通配符实际上是一个句点

$info = 'AB/F/*ZXCVBN/MTF/ ---' 
$regex = [REGEX]'/.'
 $regex.Replace($info,"/C",1)
或者简单地说:

$info -replace '^(.*?)/.','$1/C'
^([^/]*)
-这在开始时查找除斜杠以外的任何内容,并在组中捕获

/[a-zA-Z]
-然后是一个斜杠,后跟一个字母


替换者将第一组匹配的内容放回原处,并添加
/C

好的,我想我将添加一个答案,而不仅仅是一个注释。您可以使用负回溯来确保匹配的内容之前没有/,因此它将只匹配第一个。另外,正如诺亚所说,*不是通配符。是这将匹配字符串中前面没有另一个/anywhere的任何/plus 1字符:

"(?<!/.*)/."

编辑:RegEx在RegEx101中分解:

如果您不想使用RegEx,可以使用-split and-join完成相同的操作:

$info = 'AB/F/*ZXCVBN/MTF/ ---'
$info -split '/.',2 -join '/C'

AB/C/*ZXCVBN/MTF/ ---

在第一次匹配(2个元素)后,2将停止拆分。然后用/C重新连接元素。

您是否尝试过转义
*
并使用
/\*
来代替?不,诺亚,不要这样做,只需使用负回溯:
$string-replace”(?我花了一分钟的时间试图用一个表达式来做这件事,但还是画了空白。好主意。太棒了!非常感谢你!很明显我有很多关于正则表达式的阅读/实验……感谢所有参与的人,我真的很感激!
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$info -split '/.',2 -join '/C'

AB/C/*ZXCVBN/MTF/ ---