gpt4 book ai didi

c# - .* 匹配 2 次

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:46 25 4
gpt4 key购买 nike

我尝试用 C# 正则表达式匹配 .*,结果它匹配任何字符串两次:第一次 完整字符串,而不是第二次空字符串。我希望 .* 在一次匹配中匹配所有内容。我完全不明白为什么会这样以及如何防止这种情况。

长话短说:我需要替换部分文件名,可以无条件地替换为某个替换字符串。使用空字符串作为模式将匹配并将替换放在字符串的每个字符之后,如 Regex.Replace 中所述。 .因此,我在替换之前用 .* 替换了空字符串。但事实证明这执行了替换双。

为了演示发生了什么,我使用了:

string input= "sometext";
string pattern= ".*";

MatchCollection matches = Regex.Matches(input, pattern);

foreach (Match match in matches) {
Console.WriteLine("[{0}]", match.Groups[0].Value); }

产生:

[sometext]
[]
  • 为什么在已经匹配了整个字符串的情况下还要再匹配一次空字符串?
  • 我必须使用什么正则表达式或标志才能仅获得一个匹配项/替换项?

最佳答案

  • 为什么已经匹配了整个字符串,还要再匹配空字符串?

    因为正则表达式是 .*,它将匹配零次或多次出现。因此,零出现从字符串输入的末尾开始给出一个空字符串

解决方案

使用

.+

匹配一个或多个字符

string text = "sometext";
string expression = ".+";

MatchCollection matches = Regex.Matches(text, expression);

foreach (Match match in matches) {
Console.WriteLine("[{0}]", match.Groups[0].Value); }

给出输出为

[sometext]

关于c# - .* 匹配 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com