Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Как в C# заменить " кавычки на « »

#c_sharp #строки #замена


Есть строка: 

ООО "Парус"


Как заменить в ней кавычки типа " на кавычки типа » и « соответственно?
    


Ответы

Ответ 1



По идее, нужно заменять кавычки, которые стоят перед словами на открывающие, а после слов - на закрывающие. Что-то вроде этого (возможно, можно упростить код): var s = "ООО \"Парус\" и ООО \"НПП \"Рога и копыта\""; var s2 = Regex.Replace(s, "\"(\\w+)", "«$1"); var s3 = Regex.Replace(s2, "(\\w+)\"", "$1»"); Console.WriteLine(s3);

Ответ 2



Для решения можно воспользоваться Regex.Replace Для получения нужной части строки, которую надо заменить, можно использовать следующее регулярное выражение "(.+?)" В этом случае текст между кавычками будет сохранен в первой группе. При простой замене кавычек можно использовать перегрузку со строкой: var result = Regex.Replace(source, "\"(.+?)\"", "«$1»") Если нужны какие-то дополнительные операции, можно воспользоваться перегрузкой принимающей MatchEvaluator: var result = Regex.Replace(source, "\"(.+?)\"", m => { return $"«{m.Groups[1]}»"; });

Ответ 3



Вот еще один вариант: string res = Regex.Replace("ООО \"Парус\" и ОАО \"Рога и копыта\"", "\"(\\w[\\w ]*\\w)\"", @"«$1»"); MessageBox.Show(res, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); Это способ с более строгими условиями поиска, попробуйте несколько вариантов: "\"(\\w[\\w ]*\\w)\"" - названия фирм могут включать в себя буквы и цифры (класс символов "\w"), и состоять из нескольких слов (конструкция "[\\w ]*") "\"(\\a[\\a ]*\\a)\"" - этот шаблон аналогичен предыдущему, но в отличии от первого не допускает наличия в названиях фирм цифр ("\\a"). "\"(\\p{IsCyrillic}[\\p{IsCyrillic} ]*\\p{IsCyrillic})\"" - названия фирм могут быть только на кириллице ("\\p{IsCyrillic}"). Можете также попробовать использовать такой класс символов "\\p{Lu}" он задает множество заглавных букв. Однако, иногда возникают ситуации требующие нетривиального подхода, например в подобной ситуации: ООО "Научно-производственное предприятие "ГАРАНТ-СЕРВИС-УНИВЕРСИТЕТ" Регулярные выражения "из коробки" практически не применимы, однозначного решения для подобных ситуаций не существует. Решение иногда все удается найти, например можно ограничит размер подстроки с названием фирмы использовав квантор {n,м}, он означает что предыдущий элемент должен повторяется как минимум n раз, но не более чем m раз. И добавить более точные признаки указывающие на начала искомого фрагмента, в данном случае это конечный набор слов указывающих на тип юр. лица ("ООО", "ОАО", "ЗАО" и т.д.). А вложенные кавычкам внутри названия можно выделить простым паттерном "\s«\w". Вот примера такого кода: string src = "ООО \"Парус\" и ОАО \"Рога и копыта\" при согдействии "+ "ООО \"Научно-производственное предприятие "+ "\"ГАРАНТ-СЕРВИС-УНИВЕРСИТ бла бла бл\" "; string res = Regex.Replace(src, "(ООО/ЗАО/ОАО]\s]9", @"$1«"); res = Regex.Replace(res, "\"(\\w[\\w \\-«]*\\w)\"", @"«$1»"); MessageBox.Show(res, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information); источник: https://msdn.microsoft.com/ru-ru/library/az24scfc(v=vs.110).aspx#character_classes

Комментариев нет:

Отправить комментарий