正则表达式 - 在{{和}}之间查找字母数字

时间:2012-02-12 20:16:48

标签: regex

我想在文本中找到{{}}之间的所有字母数字字符。 例如。如果文本包含子串{{foo}},我想找到foo。 如果它包含{{#foo}},我想找到foo而不是#foo

我尝试了以下模式(?<=\\{\\{)(.*?)(?=\\}\\}),但它总是在上面的第二个示例中返回#

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

(?<=\{\{[^A-Za-z0-9]*)([A-Za-z0-9]+)(?=.*\}\})

此表达式允许您在{{之后和第一个字母数字字符(如果有)之前跳过非字母数字字符。它还允许您在结束}}之前使用非字母数字。

修改

回复您对f#oo的评论:据我所知,您不能将多个非连续匹配的组“粘合在一起”。最简单的解决方案是在C#托管程序中使用另一个正则表达式:

var rgx = new Regex(@"\W"); // Any non-word character
var result = rgx.Replace("f#oo$bar", ""); // Returns "foobar"

你需要回到原来的正则表达式,因为答案中的那个只匹配第一个连续的字母数字块。