2016-04-15 5 views
-3

Как я могу просто проверить, содержит ли строка {x} (x может быть любым числом)?Как проверить, содержит ли строка строку C#. Заполнитель форм

У меня есть простой RegEx, чтобы сделать это.

"This string contains {0} a placeholder".HasPlaceholder == true 

и

"This string contains no placeholder".HasPlaceholder == false 
+0

Действительно, только номер внутри '{...} '? У вас действительно была проблема с таким основным регулярным выражением? Я предположил, что вам нужно сопоставить любые заполнители 'string.Format' в начале, но теперь это кажется просто обманом [Learning Regular Expressions] (http://stackoverflow.com/a/2759417/3832970). –

+0

В этой строке содержится местозаполнитель? '" A {{0}} B "'? –

ответ

0

Вы можете сделать это следующим образом:

public static class StringExtensions 
{ 
    public static bool HasPlaceholder(this String str) 
    { 
     Regex r = new Regex(@"\{\d(\,-?\d+)?(\:\w{1,2})?\}"); 
     return r.IsMatch(str); 
    } 
} 
+0

'@" \ {\ d. *? \} "' Будет соответствовать '{4 маленьким котятам, потерявшим свои рукавицы}' тоже. См. [* Стандартные строки числового формата *] (https://msdn.microsoft.com/en-us/library/dwhawy9k (v = vs.110) .aspx). –

+0

- это не точечная разбивка? –

+0

Я думаю \ {\ d + \} is enouth –

0

Вы можете написать простое расширение и использование регулярных выражений:

public static class StringExtensions 
{ 
    public static bool HasPlaceholder(this string s) 
    { 
     return Regex.IsMatch(s, "{\\d+}"); 
    } 
} 

Это регулярное выражение работ только для указанных вами заполнителей (содержащих только номер).

Для полного заполнителя вам понадобится что-то вроде "{\\d+(,-?\\d+)?(:[A-Z]\\d*)?}". Но это все еще нуждается в уточнении. См. "Standard Numeric Format Strings" для получения полного списка допустимых символов.

Вы можете использовать это расширение, как это:

string s = "This string contains {0} a placeholder"; 
if (s.HasPlaceholder()) 
    Console.WriteLine("Contains placeholders"); 
+0

См. [* Стандартные строки числового формата *] (https://msdn.microsoft.com/en-us/library/dwhawy9k (v = vs.110) .aspx) для возможных форматов, которые шаблон должен покрывать, чтобы ответить на вопрос. –

+0

@ WiktorStribiżew включил вашу ссылку, спасибо. Но вопрос явно задает '{anynumber}', а не для регулярного выражения, допустимого для всех возможностей. –

+0

Если это так, то вопрос должен быть закрыт как обман [Learning Regular Expressions] (http://stackoverflow.com/a/2759417/3832970). –

Смежные вопросы