【发布时间】:2020-12-24 09:12:13
【问题描述】:
我正在编写代码来提取包含在 @{{}}@ 和 {{}} 中的所有单词,到目前为止,我已经在网上搜索并发现以下代码按预期工作。
string sampleString = "A @{{Quick}}@ brown @{{fox}}@ jumps @{{over}}@ a lazy {{dog}}.";
List<string> keywordList = new List<string>();
MatchCollection matchedCollection = Regex.Matches(sampleString, @"(@{{(.*?)}}@|{{(.*?)}})");
foreach (Match m in matchedCollection)
{
keywordList.Add(m.ToString());
}
上面的代码工作正常,它给了我下面列出的 4 个项目,这是正确的。
- @{{Quick}}@
- @{{Fox}}@
- @{{结束}}@
- {{狗}}
但是,当单词没有正确括在括号/模式中时,就会出现问题。例如,如果我的字符串格式不正确,如下所示,我会得到不正确的结果。
string sampleString = "A @{{Quick}}@ brown @{{fox jumps @{{over}}@ a lazy {{dog}}.";
具有上述字符串输入的代码将在列表中给我三个项目。
当前结果:
- @{{Quick}}@
- @{{狐狸跳了@{{over}}@
- {{狗}}
预期结果
- @{{Quick}}@
- @{{over}}@
- {{狗}}
任何纠正此问题的建议将不胜感激。
【问题讨论】:
-
我建议你所拥有的一切都很好,任何问题,比如你的例子,都应该通过清理数据来处理。
-
根据定义,
@{{fox jumps @{{over}}@是正确的。除非使用“单词”,否则您的意思是\S(任何不是空格)而不是.(任何字符) -
我认为在您的示例中,您可以将点
.替换为 [^{] -
嗨@xanatos,我用
\S替换了.,它起作用了。我的关键字没有任何空格,所以这会起作用。