我想在文本中找到{{
和}}
之间的所有字母数字字符。
例如。如果文本包含子串{{foo}}
,我想找到foo
。
如果它包含{{#foo}}
,我想找到foo而不是#foo
。
我尝试了以下模式(?<=\\{\\{)(.*?)(?=\\}\\})
,但它总是在上面的第二个示例中返回#
。
任何人都可以帮助我吗?
答案 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"
你需要回到原来的正则表达式,因为答案中的那个只匹配第一个连续的字母数字块。