【问题标题】:Extract string between braces using RegEx, ie {{content}}使用 RegEx 提取大括号之间的字符串,即 {{content}}
【发布时间】:2010-10-16 03:48:47
【问题描述】:

我得到了一个具有 {{some_text}} 格式的占位符的字符串。我想使用 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] = "url";

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

collection[3] = "element='h1'";

collection[4] = "element='price'";

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

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

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

【问题讨论】:

  • 您提供的链接准确地显示了正则表达式是如何分解的。应该很容易将 [ nad ] 分别替换为 {{ 和 }}。

标签: c# .net regex


【解决方案1】:

完全取自您链接的问题:

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);

我已将 [ 和 ] 更改为 {{ 和 }} (转义)。这应该使您需要的集合。请务必阅读正则表达式细分的另一个问题的第一个答案。如果你使用它,理解它很重要。

【讨论】:

    【解决方案2】:

    RegEx 功能强大,足以满足您的需求。

    试试这个正则表达式:

    \{\{.*?\}\}
    

    这将懒惰地匹配双括号之间的表达式。

    编辑: 将为您提供字符串,包括双括号。您可以手动解析它们,但如果正则表达式引擎支持前瞻和后瞻,您可以通过以下方式直接获取其中的内容:

    (?<=\{\{).*?(?=\}\})
    

    【讨论】:

      【解决方案3】:

      您需要在匹配后删除重复项。

      \{\{(.*?)}}
      

      结果 1

      1. element='title'

      结果 2

      1. 网址

      结果 3

      1. element='title'

      结果 4

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

      结果 5

      1. 元素='h1'

      结果 6

      1. element='价格'

      【讨论】:

        猜你喜欢
        • 2021-05-25
        • 2023-03-16
        • 1970-01-01
        • 2020-11-13
        • 2020-01-26
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多