Regex: соответствие кавычкам в С#

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

Вот мой код:

string sentence = "\"This is the end?\"";
string punctuation = Regex.Match(sentence, "[\"?]").Value;

Что я здесь делаю неправильно? Я ожидал, что консоль отобразит "?", однако она показывает мне двойную кавычку.

Ваш код выводит для меня " (символ двойной кавычки), а не пустую строку. ["?] означает " OR ?, поэтому он соответствует начальной двойной кавычке.

canton7 03.03.2019 18:16

@canton7 canton7, как мне сделать так, чтобы он соответствовал любой кавычке и вопросительному знаку?

TheThugger 03.03.2019 18:19

@TheThugger Это должно работать \?\" или (\?\")

ElasticCode 03.03.2019 18:21

@WaelAbbas по-прежнему не помогает. Он соответствует кавычке только один раз.

TheThugger 03.03.2019 18:23

вам нужно перебирать Regex.Matches

user3104267 03.03.2019 18:24

@TheThugger использует Regex.Match("\"This is the?\" end?\"", "(\\?\")+").Groups и возвращает результат в цикле

ElasticCode 03.03.2019 18:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
667
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно вызвать Matches вместо Match.

Пример:

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
Ответ принят как подходящий

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

Searches the input string for the first occurrence of the specified regular expression...

Вероятно, вы захотите использовать 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

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

Другие вопросы по теме