Замена пробела на точку

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Всем привет подскажите C# код с помощью которого можно заменить к примеру 5 пробел в тексте на точку.
Спасибо!
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 465
Благодарностей
8 686
Баллы
113
Всем привет подскажите C# код с помощью которого можно заменить к примеру 5 пробел в тексте на точку.
Спасибо!
C#:
// Текст для обработки
string text = project.ExecuteMacro(project.Variables["txt"].Value);
// Обработка текста "Замена"
project.Variables["res"].Value = Macros.TextProcessing.Replace(text, @"\ \ \ \ \ ", "." + " ", "Regex", "All");
 
  • Спасибо
Реакции: guloc

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
C#:
// Текст для обработки
string text = project.ExecuteMacro(project.Variables["txt"].Value);
// Обработка текста "Замена"
project.Variables["res"].Value = Macros.TextProcessing.Replace(text, @"\ \ \ \ \ ", "." + " ", "Regex", "All");
Попробовал не работает. Немного не то, надо чтоб он добавлял точки во всём тексте.
То есть, есть переменная с текстом, есть переменная какой номер пробела заменить на точку во всём тексте, к примеру заменить каждый десятый пробел точкой во всем тексте.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 465
Благодарностей
8 686
Баллы
113
Попробовал не работает. Немного не то, надо чтоб он добавлял точки во всём тексте.
То есть, есть переменная с текстом, есть переменная какой номер пробела заменить на точку во всём тексте, к примеру заменить каждый десятый пробел точкой во всем тексте.
C#:
// Текст для обработки
string text = project.ExecuteMacro(project.Variables["txt"].Value);
// Обработка текста "Замена"
project.Variables["res"].Value = Macros.TextProcessing.Replace(text, @"\ ", "." + " ", "Regex", "Range", "5");
 

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
C#:
// Текст для обработки
string text = project.ExecuteMacro(project.Variables["txt"].Value);
// Обработка текста "Замена"
project.Variables["res"].Value = Macros.TextProcessing.Replace(text, @"\ ", "." + " ", "Regex", "Range", "5");
Он заменяет только один пробел, нужно чтобы каждый 5 менял, готов задонатить за помощь.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
Он заменяет только один пробел, нужно чтобы каждый 5 менял, готов задонатить за помощь.
Хз есть ли на обычных регулярках решение. @doc потом подскажет если есть. Можно костылем на C# делать в цикле последовательную замену первого вхождения, за пример брался этот пост "Regex.Replace единичная замена вхождения":
C#:
string text = project.Variables["txt"].Value; //строка в которой будет вестись поиск (например: "1                    99")
Regex regex = new Regex(@"(?<=\ {4})\ "); // экземпляр регулярного выражения, заменяет каждый пятый пробел. Увеличение значения {4} увеличит количество пробелов.
string replacement = "."; //замена
int startat = 0; //порядковый номер найденного регулярного выражения, начинается с 0
int rcount = 1; //количество замен
if(!(startat >= 0 && rcount > 0)) //проверяем
    throw new Exception("условия поиска заданы неверно");
var matches = regex.Matches(text); //сначала ищем
if(matches.Count < startat) //проверяем
    throw new Exception("найденное количество совпадений меньше указанного индекса");
for (int i = 0; i < matches.Count; i++) {
    text = regex.Replace(text, replacement, 1, matches[startat].Index);
}

project.Variables["res"].Value = text; // вернет "1    .   .   .   .   99"
 

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Хз есть ли на обычных регулярках решение. @doc потом подскажет если есть. Можно костылем на C# делать в цикле последовательную замену первого вхождения, за пример брался этот пост "Regex.Replace единичная замена вхождения":
C#:
string text = project.Variables["txt"].Value; //строка в которой будет вестись поиск (например: "1                    99")
Regex regex = new Regex(@"(?<=\ {4})\ "); // экземпляр регулярного выражения, заменяет каждый пятый пробел. Увеличение значения {4} увеличит количество пробелов.
string replacement = "."; //замена
int startat = 0; //порядковый номер найденного регулярного выражения, начинается с 0
int rcount = 1; //количество замен
if(!(startat >= 0 && rcount > 0)) //проверяем
    throw new Exception("условия поиска заданы неверно");
var matches = regex.Matches(text); //сначала ищем
if(matches.Count < startat) //проверяем
    throw new Exception("найденное количество совпадений меньше указанного индекса");
for (int i = 0; i < matches.Count; i++) {
    text = regex.Replace(text, replacement, 1, matches[startat].Index);
}

project.Variables["res"].Value = text; // вернет "1    .   .   .   .   99"
Не работает( даже ни одной точки не поставил
Текст такой
Код:
А оказалось… Всегда страшно столкнуться с болезнью, понять, что ты не контролируешь свое тело, что  
оно заболело, а ты даже не заметила Я никогда не злоупотребляла вредными привычками, старалась  
во многом себя ограничивать, чтоб потом не аукнулось Но от всего не убережешься — появились  
полипы От этой заразы я избавилась исключительно народными средствами — боялась навредить  
себе Мне таких страхов про полипы нарассказывали, а я их сумела вывести самостоятельно  
Поспрашивала знакомых, где можно найти чистотел — использовать можно только свежее растение,  
собранное в период цветения Так что аптечные и рыночные травы мне не подходили Я сама рвала эту  
травку и дома измельчала Брала 30 г травы (но в зависимости от массы тела можно брать и больше —  
до 50 г) и заливала холодной кипяченой водой Воды должно быть в 10 раз больше, чем травы  
Чистотела 30 г, воды — 300 мл Настаивала ночь Пользовалась настоем так: сначала сделала  
очистительную клизму, ждала 3 часа, а затем делала лечебную клизму с настоем чистотела в течение  
часа Всего сделала 10 процедур и почувствовала себя гораздо лучше Такие курсы лечения необходимо  
проводить весной, когда цветет чистотел, в течение трех лет
 

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43
Вот этот код меняет 5 пробел
Код:
var text = project.Variables["tekst"].Value;
var pattern = " ";
var value = ". ";
var match = System.Text.RegularExpressions.Regex.Matches(text, pattern)[5]; //[0] - Это порядковый номер результата поиска регуляркой
text = text.Remove(match.Index, match.Length).Insert(match.Index, value);
return text;
Но только один раз, но как его запустить в цикле
 

dafaroff

Client
Регистрация
03.05.2011
Сообщения
76
Благодарностей
136
Баллы
33
Попробуй так
Код:
string text = project.Variables["text"].Value;
int numReplace = Convert.ToInt32(project.Variables["numEmptyReplace"].Value);
var aText = text.Split(' ');
string newText = "";
int i = 1;
foreach(string str in aText){
    if(i == numReplace){
        newText += str+"^ ";
        i = 0;
    }else
        newText += str+" ";
    i++;
}

return newText.Replace("^", ".");;
 
  • Спасибо
Реакции: guloc

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Код:
(([^ ]* ){4}[^ ]*)
в конце пробел
 
  • Спасибо
Реакции: guloc и orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
Сцук, опять я ТЗ не понял :-).
 
  • Спасибо
Реакции: doc

guloc

Client
Регистрация
12.09.2016
Сообщения
153
Благодарностей
150
Баллы
43

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)