【问题标题】:Regex replace string in the format @...@....@ [closed]正则表达式以@...@....@ 格式替换字符串 [关闭]
【发布时间】:2017-01-13 14:29:36
【问题描述】:

如何替换下面的字符串:

"Hello @app@username@, my name is @app@name@."

"Hello <span>@app@username@</span>, my name is <span>@app@name@</span>."

有大量的应用变量@app@variable@

【问题讨论】:

  • 你尝试了什么?您应该首先尝试自己并显示您卡住的代码。 您不应为此使用正则表达式,请使用String.Replace。正则表达式会使调试变得非常复杂。正则表达式是 1000 列表中的最后一个选项
  • 请向我们展示您的代码。我们将检查您的正则表达式并帮助修复它或提供替代解决方案
  • @JeroenvanLangen 好的,您将如何使用 String.Replace,我应该在问题中添加移动应用程序变量。我不知道所有的应用程序变量
  • 如果您不知道每个变量,您希望如何替换所有内容?
  • @Valter 类似:var newString = "Hello @app@username@, my name is @app@name@.".Replace("@app@username@", "&lt;span&gt;@app@username@&lt;/span&gt;").Replace("@app@name@", "&lt;span&gt;@app@name@&lt;/span&gt;");

标签: c# regex


【解决方案1】:

此代码在每个变量周围放置&lt;span&gt;&lt;/span&gt; 标签。

string input = "Hello @app@username@, my name is @app@name@.";
string result = Regex.Replace(input, "[@][a-z@]+[@]", s => "<span>" + s.Value + "</span>");

更新:

正如 Wiktor Stribiżew 提到的,还有一种更短的写法:

string result = Regex.Replace(input, "[@][a-z@]+[@]", "<span>$&</span>");

【讨论】:

  • 我认为在 OP 的情况下,@app@\w+@@app@[a-zA-Z]+@ 也应该可以工作,这取决于他想要做什么。
  • 为什么要使用匹配评估器?有$&amp; 反向引用。 Regex.Replace(input, "[@][a-z@]+[@]", "&lt;span&gt;$&amp;&lt;/span&gt;");
【解决方案2】:

您可以使用该模式:

@[A-Za-z]+@[A-Za-z]+@

并将其替换为:

string input = "Hello @app@username@, my name is @app@name@.";

string result = Regex.Replace(input, "@[A-Za-z]+@[A-Za-z]+@", match => "<span>" + match.Value + "</span>");

请注意,如果匹配始终采用以下形式:@app@someotherword@,您可以使用正则表达式:

@app@[A-Za-z]+@

作为@WiktorStribiżew cmets,您还可以使用$&amp; 反向引用来执行替换:

Regex.Replace(input, "@[A-Za-z]+@[A-Za-z]+@", "<span>$&</span>");

【讨论】:

  • 这与我的回答有何不同?你甚至复制了变量名...
  • @fubo 输入和结果是这样的通用名称。我的允许通用格式,即@...@...@,而您的允许多个@,即@..@...@...@,我还为特定格式提供了另一种解决方案,即@app@something@
  • @fubo 哦,我的允许大写字符,而你的似乎只有小写。如果您对人们写出类似的答案有疑问,请将其提交给 meta。
  • 为什么要使用匹配评估器?有$&amp; 反向引用。 Regex.Replace(input, "@[A-Za-z]+@[A-Za-z]+@", "&lt;span&gt;$&amp;&lt;/span&gt;");
  • @WiktorStribiżew 主要是因为我认为它是 $1 并且无法让它工作
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 2018-07-13
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多