代码之家  ›  专栏  ›  技术社区  ›  TruMan1

使用regex,ie content提取大括号之间的字符串

  •  2
  • TruMan1  · 技术社区  · 14 年前

    我得到了一个字符串,其中的占位符格式为一些。我想用c把它提取到一个集合中,相信regex是最好的方法。Regex有点超出我的想象,但在这种情况下它似乎足够强大。下面是我的例子:

    <a title="{{element='title'}}" href="{{url}}">
    <img border="0" alt="{{element='title'}}" src="{{element='photo' property='src' maxwidth='135'}}" width="135" height="135" /></a>
    <span>{{element='h1'}}</span>
    <span><strong>{{element='price'}}<br /></strong></span>
    

    我想以这样的结局结束:

    collection[0]=“element='title'”;

    collection[1]=“网址”;

    collection[2]=“element='photo'property='src'maxwidth='135'”;

    collection[3]=“元素='h1'”;

    collection[4]=“元素='price'”;

    请注意,也没有重复的内容,但是如果很难做到,我不想让事情复杂化。

    我看到这篇文章做了一些类似的事情,但在括号内: How to extract the contents of square brackets in a string of text in c# using Regex

    这里的问题是我有双大括号而不是一个字符。我该怎么做?

    3 回复  |  直到 14 年前
        1
  •  4
  •   JoshD    14 年前

    从你链接的问题中得出:

    ICollection<string> matches =
        Regex.Matches(s.Replace(Environment.NewLine, ""), @"\{\{([^}]*)\}\}")
            .Cast<Match>()
            .Select(x => x.Groups[1].Value)
            .ToList();
    
    foreach (string match in matches)
        Console.WriteLine(match);
    

    我把[和]改为和(逃跑了)。这应该是你需要的收藏。请务必阅读regex分解的另一个问题的第一个答案。如果你使用它,理解它是很重要的。

        2
  •  0
  •   salezica    14 年前

    Regex的功能足以满足您的需求。

    尝试此正则表达式:

    \{\{.*?\}\}
    

    编辑: 这将提供字符串,包括双括号。您可以手动解析它们,但是如果regex引擎支持lookahead和lookbehind,那么您可以直接使用如下内容获取内部内容:

    (?<=\{\{).*?(?=\}\})
    
        3
  •  0
  •   tinifni    14 年前

    比赛结束后,你需要把重复的东西去掉。

    \{\{(.*?)}}
    

    结果1

    1. 元素=标题

    结果2

    1. 网址

    结果3

    1. 元素=标题

    结果4

    1. element='photo'property='src'maxwidth='135'

    结果5

    1. 元素=“H1”

    结果6

    1. 元素=价格