【问题标题】:Csharp: Find & Replace string match between specific characters || in a string using RegexCsharp:查找和替换特定字符之间的字符串匹配 ||在使用正则表达式的字符串中
【发布时间】:2011-10-06 16:05:30
【问题描述】:

我有一个类似的字符串:

string originalStringBefore = "http://www.abc.com?a=||ThisIsForRndNumber||&qq=hello&jj=||ThisIsForRndNumberAlso||";

我想要介于 || 之间的每个字符串替换为随机数。

现在,随机数生成很容易,但我找不到编写正则表达式以使用模式搜索字符串并替换它的方法。

我不想通过字符串操作函数来做到这一点。

预期的解决方案/结果:

string originalStringAfter = "http://www.abc.com?a=||254877787||&qq=hello&jj=||6594741454||";

【问题讨论】:

  • 为什么&qq=hello&jj= 不应该被正则表达式匹配?

标签: c# regex string-matching


【解决方案1】:
string originalStringBefore = "http://www.abc.com?a=||ThisIsForRndNumber||&qq=hello&jj=||ThisIsForRndNumberAlso||";

Random r = new Random();
Regex rgx = new Regex(@"\|\|.*?\|\|");
Console.WriteLine(rgx.Replace(originalStringBefore, "||" + r.Next(int.MaxValue) + "||"));

【讨论】:

  • 这恰好适用于 OP 的字符串,但是如果两个要替换的字符串连续出现,比如||ReplaceThis||ReplaceThatToo||
  • 这是一个不同的逻辑。如果这是他想要的,那么他的原始字符串上的结果将是:"http://www.abc.com?a=||12345||123456||124567||"。没有?
  • @Tim:好一个!但这不是这里的问题:) 但感谢为其他人和我指出。 :)
  • @Petar, @Mazhar:规格模糊,水晶球坏了。 :)
  • @Petar:您的解决方案奏效了!我把它标记为已回答,谢谢大佬! @Tim,也谢谢你。 :)
【解决方案2】:

看起来你想要这个正则表达式:

(?<=\|\|)\w+(?=\|\|)

|| 之间查找字母数字,并单独留下包含非字母数字字符(如&amp;)的字符串。

然后,在 C# 中:

public String ComputeReplacement(Match m) {
    return RandomNumberString();
}

resultString = Regex.Replace(subjectString, @"(?<=\|\|)\w+(?=\|\|)", new MatchEvaluator(ComputeReplacement));

【讨论】:

  • 但是这些||之间可以有任何字符,除了|本身。在这种情况下应该删除 \w 吗?
  • @Mazhar:那你为什么不替换&amp;qq=hello&amp;jj=
  • 我不能简单,只有querystring参数的值。否则这是一个开销。当我们知道要替换什么时,仅在 || 之间
  • 对不起,我不明白你的意思。 &amp;qq=hello&amp;jj=||之间。 究竟有哪些规则决定了哪些部件应该更换或不应该更换?
【解决方案3】:

请找到下面粘贴的正则表达式替换命令

string result = Regex.Replace(originalStringBefore, @"\|\|.*?\|\|","||ReplaceCharactors||");

如何通过this 站点编写正则表达式,希望对您有所帮助

谢谢。

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多