你如何正则表达这种模式?

时间:2011-01-26 03:25:50

标签: c# regex

以下是模式:

WORD [COLUMN] %Anything goes%

基本上,我需要提取“WORD”,“COLUMN”以及两个“%”字符之间的值。

3 个答案:

答案 0 :(得分:3)

这样的事情?

首先抓住一切到第一个空间,然后抓住[和]之间的所有内容,最后抓住%s之间的所有内容

   ([^ ]*) \[([^\]])\] %(.*)%

答案 1 :(得分:1)

([A-Z]+) \[([A-Z]+)\] %(.*)%

如果单词和模式全部上限。

答案 2 :(得分:1)

以下正则表达式将每个值提取到命名组中。

(?<Word>(.*))(\s*)\[(?<Column>(.*))\]\s*%(?<Anything>(.*))%

在示例字符串上使用此选项应该会为您提供以下捕获:

Word = "WORD"
Column = "COLUMN"
Anything = "Anything goes"

要运行此正则表达式并获取值,您可以执行以下操作(不要将此视为最佳实践,而只是为了说明一些基本概念)。

Regex regex = new Regex(@"(?<Word>(.*))(\s*)\[(?<Column>(.*))\]\s*%(?<Anything>(.*))%");

Match match = regex.Match("WORD [COLUMN] %Anything goes%");

Console.WriteLine(match.Groups["Word"].Value);
Console.WriteLine(match.Groups["Column"].Value);
Console.WriteLine(match.Groups["Anything"].Value);

这应该将组捕获输出到控制台。有关C#中正则表达式的更多信息,请查看Regex的MSDN文档(这也将链接到您可能遇到的其他类型)。我还建议使用Expresso作为帮助您构建和分析正则表达式的工具。 Expresso还支持代码发射和各种其他有用的功能。