【问题标题】:Regex find by pattern and replace only a part [duplicate]正则表达式按模式查找并仅替换一部分[重复]
【发布时间】:2015-07-10 16:21:47
【问题描述】:

我想编写一个正则表达式来寻找这种模式:asdf=123,然后一旦在文件/字符串中找到某些内容,它应该将123 部分替换为bbbcccddd。

如何在 C# 中做到这一点?

【问题讨论】:

  • 请提供更多详细信息。您的字符串/文件中的“asdf=123”之后/之前是什么?如果它类似于“asdasd____ asdf=123_____asdasd”,那是一回事,但如果它是“zzzzzzasdf=12309656097”,那就不同了。如果您提供此字符串的缩短示例,那就太好了。值是固定的?或者这只是您正在寻找的模式示例?

标签: c# regex


【解决方案1】:
Console.WriteLine(Regex.Replace("11asdf=123 ttt", @"(?<=asdf=)123", "321"));

虽然我写了这段代码,但我认为会有很多问题,因为你没有清楚地描述你的问题,比如asdf之前有一些不是白色的字符,或者123之后有一些数字,你呢?还是要替换123?

【讨论】:

    【解决方案2】:
    string pattern = @"asdf=123";
    var result = Regex.Replace(yourString, pattern, "asdf=bbbcccddd");
    

    【讨论】:

    【解决方案3】:

    你可以这样做:

    string pattern = "asdf=123";
    Regex r = new Regex(@"(.*?=)(.*)");
    Match m = r.Match(pattern);
    if(m.Success)            
          Console.WriteLine(m.Groups[1].Value + new String(m.Groups[2].Value.Reverse().ToArray()));
    

    上面将匹配任何东西,直到找到一个等于 ((.*?=)) 并将其放在一个组中。然后它将匹配后面的内容并将其放入另一个组 ((.*))。然后第一组按原样打印,而第二组的内容反转。

    一种不太冗长但不太灵活的方法是使用Regex.Replace,如下所示:

       string pattern = "asdf=123";
       Console.WriteLine(Regex.Replace(pattern, @"(.*?=)(\d)(\d)(\d)", "$1$4$3$2"));
    

    这不太可靠,因为您需要事先知道数字的数量。

    编辑:根据您的编辑:

    您需要使用:Regex.Replace("asdf=123", "(.*?=)\d{3}","$1bbbcccddd")

    【讨论】:

    • 我不需要反转.. 任何字符串都可以在里面
    • @devhedgehog:我已经更新了我的答案。即使您的编辑完全改变了您的问题。
    • .*? 部分让我害怕一大串任意的单词。 (\S*=) 可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多