我尝试使用正则表达式在单击之后替换第一个字符,同时使用PowerShell。
无论我如何尝试,我似乎无法使其发挥作用。这就是我所说的:
代码:
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$regex = [REGEX]'/*'
$regex.Replace($info,"/C",1)
$regex
输出:
/CAB/F/*ZXCVBN/MTF/ ---
我只是尝试用/F
替换表达式中的/C
,但每次都失败。
我使用/*
,因为我不知道在第一个/
之后我会找到什么字符,但我最终要替换的是什么当天。
我很确定这会非常简单但是,正如你所看到的,我对正则表达式不够熟悉。
答案 0 :(得分:1)
好的,我想我会添加一个答案,而不仅仅是评论。您可以使用负向lookbehind来确保在匹配之前没有/,因此它只匹配第一个。另外,正如Noah所说, * 不是通配符,。是。这将匹配字符串中没有其他/任何位置的任何/加1字符:
"(?<!/.*)/."
因此,在代码的上下文中,它看起来像这样:
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$regex = [REGEX]"(?<!/)/."
$regex.Replace($info,"/C",1)
这些行将输出:
AB/C/*ZXCVBN/MTF/ ---
修改:RegEx101的RegEx细分:http://regex101.com/r/tI7oN1/1
答案 1 :(得分:0)
你在正则表达式中误解了*。它不是通配符。
正则表达式中的星号表示捕获表达式中前面的0个或多个项目。 正则表达式中的通配符实际上是一个时期。
答案 2 :(得分:0)
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$regex = [REGEX]'/.'
$regex.Replace($info,"/C",1)
或者简单地说:
$info -replace '^(.*?)/.','$1/C'
答案 3 :(得分:0)
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$regex = [REGEX]'^([^/]*)/[a-zA-Z]'
$regex.Replace($info,"$1/C",1)
$regex
^([^/]*)
- 这会在开头搜索除了斜线之外的任何内容,在组中捕获
/[a-zA-Z]
- 然后斜线后跟一个字母
替换会放回第一组匹配的内容,并添加/C
答案 4 :(得分:0)
如果您不想使用正则表达式,可以使用-split和-join完成相同的操作:
$info = 'AB/F/*ZXCVBN/MTF/ ---'
$info -split '/.',2 -join '/C'
AB/C/*ZXCVBN/MTF/ ---
,2将在第一场比赛后停止分裂(2个元素)。然后用/ C重新加入元素。