Regex: сопоставлять кавычки в C # [дубликаты]

Здесь много правильных ответов, но я хотел добавить это (для полноты):

Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.

Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.

template class vector<int>;

Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

0
задан TheThugger 3 March 2019 в 17:19
поделиться

2 ответа

Если вы хотите сопоставить все кавычки и вопросительные знаки, как указано в вашем вопросе, тогда ваш шаблон в порядке. Проблема в том, что Regex.Match будет возвращать только первое совпадение, которое он найдет. Из MSDN :

Ищет во входной строке первое вхождение указанного регулярного выражения ...

Вы, вероятно, захотите использовать Matches:

string sentence = "\"This is the end?\"";
MatchCollection allPunctuation = Regex.Matches(sentence, "[\"?]");

foreach(Match punctuation in allPunctuation)
{
    Console.WriteLine("Found {0} at position {1}", punctuation.Value, punctuation.Index);
}

Это вернет:

Found " at position 0
Found ? at position 16
Found " at position 17

Я бы также отметил, что если вы действительно хотите соответствовать всем символам пунктуации, включая такие вещи, как «французские» кавычки (« и »), «умные» кавычки ( и ), перевернутые знаки вопроса (¿) и многие другие, вы можете использовать категории символов Unicode с шаблоном, подобным \p{P}.

0
ответ дан p.s.w.g 3 March 2019 в 17:19
поделиться

Вы должны вызывать Матчи вместо Матча.

Пример:

string sentence = "\"This is the end?\"";
var matches = Regex.Matches(sentence, "[\"?]");
var punctuationLocations = string.Empty;
foreach(Match match in matches)
{
    punctuationLocations += match.Value + " at index:" + match.Index + Environment.NewLine;
}

// punctuationLocations:
//   " at index:0
//   ? at index:16
//   " at index:17
0
ответ дан JGriffin 3 March 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: