正则表达式选择模板化词

时间:2010-01-18 18:22:36

标签: regex

我想使用正则表达式找到{}中包含的所有单词。

如果我的字符串是'The Insured Addr {Address} is not valid for {Name}'

我只想提取'Address''Name'。我已经尝试了几个小时没有成功。

非常感谢任何帮助。

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

这不起作用。

我正在使用C#。模板也可以包含点'标记属性,如'Address.city','ABC.PQR.XYZ'

7 个答案:

答案 0 :(得分:2)

/{(.+?)}/

这将在括号内得到任何内容,甚至多个单词。

如果您希望可能有空格填充,则可以使用:

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

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

答案 1 :(得分:1)

/\{([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']

答案 2 :(得分:1)

{(?<name>\w+)}

这将捕获名为{的群组中}name内的文字。

在C#中:

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

在控制台上。

答案 3 :(得分:1)

>>> import re
>>> s = 'The Insured Addr {Address} is not valid for {Name}'
>>> re.findall('\{([a-zA-Z0-9 ]+)\}', s)
['Address', 'Name']

答案 4 :(得分:1)

正则表达式:

\{([^}]*)}

将同时匹配'{Address}''{Name}',并会捕获匹配组1中的'Address''Name'。因为[^}]也匹配换行符,它也会如果{}位于不同的行(.*?不是这种情况),则可以工作。

答案 5 :(得分:0)

\{(.*?)\}

*?代替*是为了懒惰,而不是{Address} is not valid for {Name}作为一个长单位。请参阅“懒惰而不是贪婪”下的here

答案 6 :(得分:0)

{([^}] *)}抓住第一个。