Подтвердить что ты не робот

Regex: текст извлечения С# в двойных кавычках

Я хочу извлечь только те слова в двойных кавычках. Итак, если содержание:

Будет ли "вы" отвечать на ваши "вопросы", отправленные вам по электронной почте?

Ответ должен быть

  • вы
  • вопросы
4b9b3361

Ответ 1

Попробуйте regex:

\"[^\"]*\"

или

\".*?\"

объясните:

[^ character_group ]

Отрицание: соответствует любому одиночному символу, который не находится в символьной_группе.

*?

Соответствует предыдущему элементу ноль или более раз, но как можно меньше.

и пример кода:

foreach(Match match in Regex.Matches(inputString, "\"([^\"]*)\""))
    Console.WriteLine(match.ToString());

//or in LINQ
var result = from Match match in Regex.Matches(line, "\"([^\"]*)\"") 
             select match.ToString();

Ответ 2

На основе ответа @Ria:

static void Main(string[] args)
{
    string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
    var reg = new Regex("\".*?\"");
    var matches = reg.Matches(str);
    foreach (var item in matches)
    {
        Console.WriteLine(item.ToString());
    }
}

Вывод:

"you"
"questions"

Вы можете использовать string.TrimStart() и string.TrimEnd(), чтобы удалить двойные кавычки, если вы этого не хотите.

Ответ 3

Мне нравятся регулярные выражения. Вы могли бы также подумать о чем-то вроде этого

string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
var stringArray = str.Split('"');

Затем возьмите элементы odd из массива. Если вы используете linq, вы можете сделать это следующим образом:

var stringArray = str.Split('"').Where((item, index) => index % 2 != 0);

Ответ 4

Это также крадет Regex из @Ria, но позволяет получить их в массив, в котором вы удаляете кавычки:

strText = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
MatchCollection mc = Regex.Matches(strText, "\"([^\"]*)\"");
for (int z=0; z < mc.Count; z++)
{
    Response.Write(mc[z].ToString().Replace("\"", ""));
}

Ответ 6

Мне нужно было сделать это на С# для анализа CSV, и ни одна из них не работала для меня, поэтому я придумал следующее:

\s*(?:(?:(['"])(?<value>(?:\\\1|[^\1])*?)\1)|(?<value>[^'",]+?))\s*(?:,|$)

Это приведет к анализу поля с кавычками или без него и исключает кавычки из значения, сохраняя вложенные кавычки и запятые. <value> содержит значение синтаксического поля. Без использования названных групп, группа 2 или 3 содержит значение.

Есть более эффективные и эффективные способы проведения синтаксического анализа CSV, и этот метод не будет эффективен при определении плохого ввода. Но если вы можете быть уверены в своем формате ввода и производительности, это не проблема, это может сработать для вас.

Ответ 7

Я совмещаю Regex и Trim:

const string searchString = "This is a \"search text\" and \"another text\" and not \"this text";
var collection = Regex.Matches(searchString, "\\\"(.*?)\\\"");
foreach (var item in collection)
{
    Console.WriteLine(item.ToString().Trim('"'));
}

Результат:

search text
another text