c#Regex:找到占位符作为子字符串

时间:2011-06-04 19:00:11

标签: c# regex

我有以下字符串。

"hello [#NAME#]. nice to meet you. I heard about you via [#SOURCE#]."

在上面的文字中我有两个占位符。 NAME和SOURCE

我想使用Reg Ex。

提取这些子字符串

查找这些占位符列表的注册模式是什么。

我试过

string pattern = @"\[#(\w+)#\]";

结果

hello  
NAME 
. nice to meet you. I heard about you via  
SOURCE 
.

我想要的只是

NAME
SOURCE

示例代码

string tex = "hello [#NAME#]. nice to meet you. I heard about you via [#SOURCE#]."; 

    string pattern = @"\[#(\w+)#\]";

    var sp = Regex.Split(tex, pattern);

    sp.Dump();

3 个答案:

答案 0 :(得分:8)

你的正则表达式工作正常。那就是Regex.Split()的行为方式(参见the doc)。如果你所说的真的是你想要的,你可以使用类似的东西:

var matches = from Match match in Regex.Matches(text, pattern)
              select match.Groups[1].Value;

另一方面,如果您想使用某些规则替换占位符(例如使用Dictionary<string, string>),那么您可以这样做:

Regex.Replace(text, pattern, m => substitutions[m.Groups[1].Value]);

答案 1 :(得分:1)

试试这个正则表达式:

\[#([A-Z]+)#\]

答案 2 :(得分:-1)

^hello (.*?). nice to meet you. I heard about you via (.*?).$

很简单,()意味着你要捕捉内部的内容,.*?是(所谓的)“不同意”捕获(捕获尽可能少的字符)。 .表示任何角色。

demo of above

除非您的地方总是使用[#前缀和#]后缀,否则请查看其他用户的帖子。