Автоматическая замена кавычек по логике Word - C#
Формулировка задачи:
Не знаю, насколько избита тема, но по данному вопросу ничего толком не нашел в инете. Предлагаю свою реализацию для тех, кому не все равно какие кавычки пользователь вводит в программу.
Написал статичный класс, который в свой единственный метод принимает параметр TextBox. Метод хорошо работает на событии OnTextChanged.
Пример реализации:
Регулярку можно написать на свой вкус и цвет, я писал для своих нужд. Если допилить, можно сократить код.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Text.RegularExpressions;
- namespace QuotesConverter_
- {
- static class QuotesConverter
- {
- public static void QuotesReplace(TextBox tb)
- {
- string str = tb.Text; //Текст TextBox
- int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox
- char[] chars = str.ToCharArray(); //Конверт текста TextBox в символьный массив
- string pattern = "[«» А-Яа-я\"]"; //Шаблон регулярки
- Regex regex = new Regex(pattern); //Создаем регулярку
- MatchCollection matches = regex.Matches(str); //Запускаем поиск по регулярке в тексте TextBox
- if (matches.Count > 0) //Если совпадения найдены вообще
- {
- for (int ctr = 0; ctr < matches.Count; ctr++) //Циклим массив совпадений
- {
- if (!Regex.IsMatch(matches[ctr].Value, "[ А-Яа-я]")) //Проверяем, является ли текущий символ буквой или пробелом, если является, то идем дальше
- {
- if (matches[ctr - 1].Value == " ") //Проверяем, является ли предыдущий символ текущего пробелом, если является, то ...
- {
- chars[matches[ctr].Index] = '«'; //Заменяем текущий символ в массиве на открывающую "елочку"
- }
- else
- {
- chars[matches[ctr].Index] = '»'; //Иначе заменяем текущий символ в массиве на закрывающую "елочку"
- }
- }
- }
- string newstr = String.Empty; //Создаем пустую строку
- foreach (char c in chars)
- {
- newstr += c; //Записываем в цикле в новую строку посимвольно весь символьный массив
- }
- tb.Text = newstr; //Заменяем текст в TextBox на новую строку
- }
- tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение
- }
- }
- }
Листинг программы
- private void textBox1_TextChanged(object sender, EventArgs e)
- {
- QuotesConverter.QuotesReplace(sender as TextBox);
- }
Решение задачи: «Автоматическая замена кавычек по логике Word»
textual
Листинг программы
- public static void QuotesReplace(TextBox tb)
- {
- string str = tb.Text; //Текст TextBox
- int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox
- tb.Text = QuotesReplaceToString(str);
- tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д