Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
2 / 2 / 2
Регистрация: 09.01.2014
Сообщений: 71

Удаление символов из строки по условию

18.07.2014, 11:23. Показов 3233. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Есть строка. В ней используются пробелы либо символы "\0" для разделения слов. необходимо удалить из строки пробелы или "\0" если они идут подряд 3 и более штук, если 2 пробела рядом или "\0\0" то заменить одним, а если по один стоит то пробел не трогать а "\0" заменить на пробел. Помогите пожалуйста кто знает, а то я чет совсем туплю)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2014, 11:23
Ответы с готовыми решениями:

Преобразовать заданные строки, согласно условию (сортировка и сравнение строк, вставка/удаление символов)
Даны строки A и B. Если все символы A входят в B и в B есть повторяющиеся символы, то упорядочить символы B в порядке, обратном к...

Удаление строки из StringGrid по условию
Добрый вечер. Вопрос есть. Имеется StringGrid. В него программно заносятся строки с внешнего общего устройства. К примеру 50 строк...

Удаление строки в Excel по условию
Добрый день, помогите разобраться, нужно в документе exel удалить строки содержащие определенное значение ячейки, и пересохранить файл

10
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 11:35
kogramat, регекспы в 3 прохода. Сначала для 3, потом для 2, потом для 1.
0
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
18.07.2014, 11:48
Если не хочешь regex, то можно в стрингбилдер перевести и if'ами отыскивать и удалять ненужные комбинации

Добавлено через 3 минуты
но это извращение из С =)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 12:01
хотя можно и в один проход:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication43
{
    class Program
    {
        static void Main()
        {
            string s = string.Format("Всем{1}доброго времени суток.{0}Есть строка.{1}В ней испол{2}ьзуются{2}пробелы либо{0}символы", '\0', "  ", "\0\0\0");
            var result = Regex.Replace(s, "[\0|\\s]+", ProcessMatch);
            Console.WriteLine(result);
        }
 
        private static string ProcessMatch(Match match)
        {
            string value = match.Value;
            switch (value.Length)
            {
                case 1:
                    return " ";
                case 2:
                    return value[0].ToString();
                default:
                    return string.Empty;
            }
        }
    }
}
2
18.07.2014, 12:36

Не по теме:

Psilon, в этом шаблоне для регулярки | ни к чему

0
18.07.2014, 12:59

Не по теме:

rattrapper, ну да, привычка :D

0
2 / 2 / 2
Регистрация: 09.01.2014
Сообщений: 71
18.07.2014, 15:41  [ТС]
Спасибо огромное)
А не подскажите что-нибудь по регулярным выражениям почитать, только с самых азов, а то я столкнулся с обработкой строк и как нуб не знаю как быть)
0
18.07.2014, 15:43

Не по теме:

блин regex это трындец

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 16:03
fidgi, для таких простых задач самое оно.

kogramat, Регулярные выражения FAQ

в данном лучае слэши пришлось дублировать, потому что символ бэкслеша обозначается как '\\', поэтому то, что в тексте выглядит как \s, приходится писать как \\s. Это из-за того, что нужно нуль-символ использовать. Аналогично можно было бы так записать:
C#
1
var result = Regex.Replace(s, string.Format("[{0}{1}]+", '\0', @"\s"), ProcessMatch);
избавились от лишнего слеша, но получилось ощутимо длиннее и запутаннее.

Добавлено через 10 минут
kogramat, лол, век живи, век учись, оказывается null обрабатывается самими регэкспами Тогда просто:
C#
1
var result = Regex.Replace(s, @"[\0\s]+", ProcessMatch);
то есть либо null, либо пробел
0
2 / 2 / 2
Регистрация: 09.01.2014
Сообщений: 71
18.07.2014, 16:53  [ТС]
ооо)красиво)
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.07.2014, 16:57
Цитата Сообщение от Psilon Посмотреть сообщение
Это из-за того, что нужно нуль-символ использовать
В Regex и такой расклад предусмотрен:
C#
1
"[\0\\s]+" == @"[\x00\s]"
Добавлено через 51 секунду
Цитата Сообщение от Psilon Посмотреть сообщение
век живи, век учись, оказывается null обрабатывается самими регэкспами
Упс, недочитал. Так, конечно, будет лучше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.07.2014, 16:57
Помогаю со студенческими работами здесь

Вставка в строку нескольких символов и удаление символов из строки
не могу найти информацию про это:( какими операторами это делается?

Вывод символов из строки по условию
Дана строка. Вывести первые три символа и последние три символа, если длина строки больше 5. Иначе вывести первый символ столько раз,...

Удаление строки по условию столбца датой
Добрый день нужна помощь умных людей. есть код с запросом вроде все работает нормально отображает в гриде как надо но есть один нюанс ...

Работа с типизированными файлами. Удаление строки в файле по условию
Всем привет! :) В строках данные записаны в таком формате например: ФАМИЛИЯ | ИМЯ | ОТЧЕСТВО | как по запросу фамилии удалить все...

Напечатать слова из строки, число N символов в которых удовлетворяют условию: 2 < N < 7
В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru