正则表达式。替换组重复的输出?

时间:2018-11-05 20:29:33

标签: c# regex

我对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”

1 个答案:

答案 0 :(得分:1)

顺序出现多少X星并不重要:

(.*)(.*)(.*)(...

因为存在一个称为主题字符串结尾的位置,所有位置都将与之匹配。要查看预期结果,请将模式更改为:

^([^_]*)(.*)

在上方添加一个插入符,该插入符定义了边界,并使引擎无法在输入字符串的末尾立即开始匹配。