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

用于选择模板化单词的正则表达式

  •  0
  • AlwaysAProgrammer  · 技术社区  · 16 年前

    我想找出一个表格中的所有文字 {} 使用正则表达式。

    'The Insured Addr {Address} is not valid for {Name}' ,

    'Address' 'Name'

    我试过了 ([/{]([a-zA-Z0-9 ]*)[}])

    这是行不通的。

    我用的是C#。模板还可以包含点符号属性,如“Address.city”和“ABC.PQR.XYZ”

    7 回复  |  直到 16 年前
        1
  •  1
  •   jason    16 年前
    {(?<name>\w+)}
    

    这将捕获 { } 在名为 name .

    Regex r = new Regex(@"{(?<name>.+?)}");
    MatchCollection coll = r.Matches("The Insured Addr {Address} is not valid for {Name}");
    foreach (Match m in coll) {
        Console.WriteLine(m.Groups["name"]);
    }
    

    印刷品

    Address
    Name
    

    在控制台上。

        2
  •  2
  •   Jeff B    16 年前
    /{(.+?)}/
    

    这将获得大括号内的任何内容,甚至多个单词。

    /{\s*([\S+]+?)\s*}/
    

    这意味着{Address}和{Address}返回相同的内容。在这个版本中,标记中不允许有其他空格,但是您可以很容易地使用(+++)。这个意味着它将在两个最近的大括号内找到一个单词。

        3
  •  1
  •   SilentGhost    16 年前
    >>> import re
    >>> s = 'The Insured Addr {Address} is not valid for {Name}'
    >>> re.findall('\{([a-zA-Z0-9 ]+)\}', s)
    ['Address', 'Name']
    
        4
  •  1
  •   Bart Kiers    16 年前

    正则表达式:

    \{([^}]*)}
    

    两者都匹配 '{Address}' '{Name}' 并将捕获 'Address' 'Name' 在第一组比赛中,因为 [^}] 也匹配换行符,如果 { } .*? ).

        5
  •  1
  •   Daniel Vandersluis    16 年前
    /\{([a-z0-9]+)\}/i
    

    我不知道您使用的是什么语言,但是大括号内的单词将被捕获到第一个子匹配组中。

    例如,使用Ruby:

    str = 'The Insured Addr {Address} is not valid for {Name}'
    matches = str.scan(/\{([a-z0-9]+)\}/i).flatten
    # => ['Address', 'Name']
    
        6
  •  0
  •   Yaakov Shoham    16 年前

    \{(.*?)\}

    *? 而不是 * 是为了懒散,为了不被抓住 {Address} is not valid for {Name} 作为一个长单元。看见 here

        7
  •  0
  •   MikeL    16 年前

    {([^}]*)}将获取第一个。