Регулярное выражение для выбора шаблонизированных слов - PullRequest
0 голосов
/ 18 января 2010

Я хочу найти все слова, заключенные в {}, используя регулярное выражение.

Если моя строка 'The Insured Addr {Address} is not valid for {Name}',

Я хочу вытащить только 'Address' и 'Name'. Я пытался пару часов безуспешно.

Любая помощь очень ценится.

Я пытался ([/{]([a-zA-Z0-9 ]*)[}])

Это не работает.

Я использую C #. Также шаблоны могут содержать точечные нотированные свойства, как в 'Address.city', 'ABC.PQR.XYZ'

Ответы [ 7 ]

2 голосов
/ 18 января 2010
/{(.+?)}/

Это получит что-нибудь внутри фигурных скобок, даже несколько слов.

Если вы ожидаете, что у вас может быть заполнение пробелами, вы можете использовать:

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

Это будет означать, что {Address} и {Address} возвращают одно и то же. В этой версии никакие другие пробелы не допускаются в теге, но вы можете сделать это так же легко (. +?). ? означает, что он найдет слово в двух ближайших скобках.

1 голос
/ 18 января 2010

Регулярное выражение:

\{([^}]*)}

будет соответствовать '{Address}' и '{Name}' и будет захватывать 'Address' и 'Name' в группе совпадений 1. Поскольку [^}] также соответствует разрывам строк, онотакже будет работать, если { и } находятся на другой строке (а с .*? это не так).

1 голос
/ 18 января 2010
{(?<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

на консоли.

1 голос
/ 18 января 2010
>>> import re
>>> s = 'The Insured Addr {Address} is not valid for {Name}'
>>> re.findall('\{([a-zA-Z0-9 ]+)\}', s)
['Address', 'Name']
1 голос
/ 18 января 2010
/\{([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']
0 голосов
/ 18 января 2010

{([^}] *)} Получит первый.

0 голосов
/ 18 января 2010

\{(.*?)\}

*? вместо * для лени, чтобы не поймать {Address} is not valid for {Name} как одну длинную единицу. См. здесь в разделе «Лень вместо жадности».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...