【问题标题】:Replace {tag} with a value or completely remove {any-tag}用一个值替换 {tag} 或完全删除 {any-tag}
【发布时间】:2010-05-27 16:02:21
【问题描述】:

我设计了一个多语言网站,数据库中的一些值有一个标签,该标签将被其语言值替换,删除标签括号(如果是 {} )或完全删除。

有两种情况:

去掉括号:

value {mm} >> value mm

完全删除:

value {mm} >> value

{tag} 也可以是任意长度并且可以包含 -

有人可以帮我处理正则表达式吗?

【问题讨论】:

  • 这里有问题吗?我不知道您是否正在寻找预处理页面,关于如何使用资源文件进行国际化的建议或什么。
  • 我只需要正则表达式将 {mm} 替换为 mm 或完全删除 {mm}
  • 补充@48klocs 所说的,如果您的网站应该迎合不同的文化和语言,ASP.NET 已经提供了一种处理多种语言元素的方法。它比一堆 if/else 语句和替换数据库中的值要干净得多。如果您有兴趣对 ASP.NET globalizationlocalization 进行一些研究。这个过程也可以称为国际化

标签: c# .net asp.net regex


【解决方案1】:

这里有一些您可能会觉得有用的代码。对于许多许多更多选项,请参阅Regular-expressions.info

全部代码Using System.Text.RegularExpressions;


删除所有出现的{mm}(和 mm):

Regex.Replace(myString, "{mm}", String.Empty, RegexOptions.None);

mm替换所有出现的{mm}mm):

Regex.Replace(myString, "{mm}", "mm", RegexOptions.None);

删除所有出现的{any-characters}:

Regex.Replace(myString, @"{[\-a-z]*}", String.Empty, RegexOptions.IgnoreCase);

将所有出现的{any-characters} 替换为any-characters

Regex.Replace(myString, @"{(?<tag>[\-a-z]*)}", "${tag}", RegexOptions.IgnoreCase);

【讨论】:

  • @cyclotis04:正则表达式对我来说是新的,我认为它们不容易理解。我以前访问过这个网站,但我需要快速的解决方案。这就是我在这里问的原因。但感谢您的建议;)stackoverflow 对我来说就像一个档案。所以如果我以后需要同样的东西,我先看这里:)
  • @Hasan @cyclotis 可能意味着{([\-a-z]*)}(删除?)。顺便说一句,- 不需要在字符类中转义,但请确保将其放置在类的开头或结尾,如图所示,以防止意外的字符范围规范。让它逃脱当然没有害处,只是仅供参考。
  • @Hasan: result.Replace("{", String.Empty).Replace("}", String.Empty); 会去掉 ALL 括号,这可能是你想要的。如果你只想去掉其中的一部分,正则表达式是最好的选择。
  • @cyclotis 命名肯定更清晰。通常,如果涉及少量组,只要它们不嵌套就不太难遵循,否则命名它们会更好。顺便说一句,替换字符串中的命名组语法必须是 ${tag} 而不是 $tag。对于编号组,它是 $n,但对于命名组,它是 ${group-name}
【解决方案2】:

.Net 已经使用String.Format 提供了类似的功能。

string.Format("value {0}", ""); // returns "value "
string.Format("value {0}", "some value"); // returns "value some value"

你可以用这个方法做更高级的事情,比如指定数字的格式:

string.Format(new CultureInfo("en-US"), "value {0:N}", 10000); // returns 10,000.00
string.Format(new CultureInfo("es-ES"), "value {0:N}", 10000); // returns 10.000,00

这种方法的两个缺点:

  1. 无需卸下支架。
  2. 无法命名您的占位符。您必须使用序数占位符。 {0}、{1}...{n}。

【讨论】:

  • 不错,但不完全是我需要的。我需要知道用标签替换什么。例如有像 {power-source} 这样的标签。我不能用它的语言标签替换所有的零。它也不是用户友好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2012-08-12
  • 2012-10-15
相关资源
最近更新 更多