Автоматическая замена кавычек по логике 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; //Возвращаем курсор в изначальное положение
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы