【问题标题】:Regex to match exact words in double square brackets正则表达式匹配双方括号中的确切单词
【发布时间】:2016-07-28 09:46:56
【问题描述】:

我有以下正则表达式,它匹配双括号方括号内的单词:

@"(?<=\[\[)[^]]+(?=\])"    

问题: 我想在输入中替换

[[Hello]] -> Foo
[[HelloWorld]] -> Bar

代码如下:

message = message.Replace(match.Value, value.ToString());
message = Regex.Replace(message, @"[\[\]']+", "");

在输出中,我收到 FooWorld。我应该如何修改我的正则表达式以获取 Foo 和 Bar?

【问题讨论】:

  • message = message.Replace("[[", "").Replace("]]", "") 就足够了。
  • 请确认您不需要替换,只是收集[[]] 中的所有字符串。至于我,问题:我想在输入中替换使这个问题与Finding keys in string enclosed with [[ ]]不同。
  • 由于上述答案提供了一个提取解决方案,而这个解决方案需要一个替换解决方案,因此应该重新提出问题。

标签: c# regex


【解决方案1】:

您的正则表达式 @"(?&lt;=\[\[)[^]]+(?=\])" 匹配除 ] 以外的 1+ 个字符,前提是前面有 [[,后面有 ]。它并不真正匹配[[x x x]]-like 字符串。它甚至不匹配[[x y ] bracket ]]-like 字符串。

您可以使用@"\[\[(.*?)]]" 正则表达式(使用RegexOptions.Singleline 标志)实现您所需要的,并替换为$1

message = Regex.Replace("[[Hello]]", @"\[\[(.*?)]]", "$1"));

IDEONE demo

但是,鉴于您当前的要求(或他们的缺席),您可以使用

 message = message.Replace("[[", "").Replace("]]", "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2015-04-20
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多