我有以下字符串。
"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();
答案 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 (.*?).$
很简单,()
意味着你要捕捉内部的内容,.*?
是(所谓的)“不同意”捕获(捕获尽可能少的字符)。 .
表示任何角色。
除非您的地方总是使用[#
前缀和#]
后缀,否则请查看其他用户的帖子。