【问题标题】:regex pattern for tags needed所需标签的正则表达式模式
【发布时间】:2012-08-20 10:34:50
【问题描述】:

如何,

我需要以下方面的帮助。

我需要在字符串中查找标签。这些标签以{{ 开头并以}} 结尾,我收到的字符串中会有多个标签。

到目前为止,我有这个,但没有找到任何匹配项,我在这里缺少什么?

List<string> list = new List<string>();

string pattern = "{{*}}";

Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);

while (m.Success)
{
    list.Add(m.Groups[0].Value);

    m = m.NextMatch();
}


return list;

甚至尝试过string pattern = "{{[A-Za-z0-9]}}"; 谢谢

PS。我对正则表达式几乎一无所知。

【问题讨论】:

  • 这是 C# 吗? - 请始终将您使用的语言作为标签,因为正则表达式“风味”之间存在细微差异
  • 您的表达式实质上指定:“找到{,然后匹配{(零到无限次),然后匹配}}

标签: c# regex tags


【解决方案1】:

您不仅要使用 {{.+?}} 作为您的正则表达式,还需要传递 RegexOptions.SingleLine。这会将您的整个字符串视为单行,而 .将匹配 \n (通常不会匹配)。

【讨论】:

    【解决方案2】:

    试试{{.+}}.+ 表示标签中必须至少有一个字符。

    编辑:

    要捕获包含您的标签的字符串,您可以执行{{(.+)}},然后使用 Tokenize 或 Scanner 类标记您的匹配项?

    【讨论】:

    • 但是我得到的列表是整个文本,而不仅仅是找到的标签:(
    • 查看 m.Groups 数组是否有更多匹配,括号中的匹配通常索引为 1。索引 0 是整个匹配的字符串。
    • M.Groups 列表中只有 1 个。其中包括整个字符串
    • 所以,我意识到如果只有一个标签,它只返回标签,如果有更多,它返回一切
    • 即,如果字符串为{{test1}} and {{test2}} and test3,则返回{{test1}} and {{test2}},因此找不到第一个}}
    【解决方案3】:

    我建议尝试以下方法:

    List<string> list = new List<string>();
    
    string pattern = "{{(.*?)}}";
    
    Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    Match m = r.Match(text);
    
    while (m.Success)
    {
        list.Add(m.Groups[1].Value);
    
        m = m.NextMatch();
    }
    
    return list;
    

    正则表达式指定:

    {{       # match {{ literally
    (        # begin capturing into group #1
      .*?    # match any characters, from zero to infinite, but be lazy*
    )        # end capturing group
    }}       # match }} literally
    

    “lazy”表示尝试在“}}”之后继续匹配模式,然后回溯到.*?,并且如果字符不匹配,则不情愿地将字符添加到捕获组only }} - 希望这是有道理的。

    我通过修改正则表达式更改了您的代码,并从正则表达式匹配对象 (m.Groups[1].value) 中提取了第一个匹配组,而不是整个匹配。

    【讨论】:

      【解决方案4】:

      {{.*?}}{{.+?}}

      。 - 表示任何符号

      ? - 表示懒惰(不要忽略下一个模式)

      【讨论】:

        猜你喜欢
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        相关资源
        最近更新 更多