我想使用正则表达式找到{}
中包含的所有单词。
如果我的字符串是'The Insured Addr {Address} is not valid for {Name}'
,
我只想提取'Address'
和'Name'
。我已经尝试了几个小时没有成功。
非常感谢任何帮助。
我尝试了([/{]([a-zA-Z0-9 ]*)[}])
这不起作用。
我正在使用C#。模板也可以包含点'标记属性,如'Address.city','ABC.PQR.XYZ'
答案 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)
{([^}] *)}抓住第一个。