我对Regex.Replace有一个奇怪的问题。
我认为我的即时窗口说明了一切:
pattern
"([^_]*)(.*)"
fileNameToReplicate
"{Productnr}_LEI1.JPG"
Regex.Replace(fileNameToReplicate, pattern, $"$1")
"{Productnr}"
Regex.Replace(fileNameToReplicate, pattern, $"$2")
"_LEI1.JPG"
Regex.Replace(fileNameToReplicate, pattern, $"sometext$2")
"sometext_LEI1.JPGsometext"
因此,我的模式将查找第一个下划线并捕获所有内容,直到group1中的下划线为止。
然后,它捕获文本的其余部分(从下划线开始直到字符串的结尾),并将其捕获为第2组。
正则表达式可以正确捕获,请查看here进行查看。
为什么前缀文本输出两次?一次在小组之前,一次在小组之后。显然我希望得到这样的输出:
“ sometext_LEI1.JPG”
答案 0 :(得分:1)
顺序出现多少X星并不重要:
(.*)(.*)(.*)(...
因为存在一个称为主题字符串结尾的位置,所有位置都将与之匹配。要查看预期结果,请将模式更改为:
^([^_]*)(.*)
在上方添加一个插入符,该插入符定义了边界,并使引擎无法在输入字符串的末尾立即开始匹配。