Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/117: Рейтинг темы: голосов - 117, средняя оценка - 4.78
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
1

Регулярное выражение - текст в скобках

14.11.2014, 10:23. Показов 24120. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо регулярное выражение которое находит конструкцию - любой текст или символы в круглых скобках и на конце обязательно точка. Т.е. вида - (что то в скобках).

Добавлено через 39 минут
те если в строке есть скобки с тестом внутри, то не трогать, а если скобки заканчиваются на точку то удалить. Из строки "пример (вот так вот) пример (вот так вот)." - должно получится "пример (вот так вот) пример "
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2014, 10:23
Ответы с готовыми решениями:

Регулярное выражение для символов в фигурных скобках
Добрый день, форумчане. Ищу строку {%x%}, где x один или несколько символов. \{%]*\%} Моё...

Регулярное выражение. Получить текст в кавычках
Привет всем.Собственно сабж помогите с регулярным выражением: slot="8" money="501" eblem="3" ...

Как сделать чтобы считало выражение в скобках?
Как сделать чтобы считало выражение в скобках? например такое 2+6*(4+6-9)-(2+9*(2-6))+10*sin(60) ...

Текст в скобках
Всем привет, как зделать чтобы весь текст в скобках был тектом. response помечена белым, как...

6
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
14.11.2014, 10:25 2
Лучший ответ Сообщение было отмечено aleks_pilipenko как решение

Решение

C#
1
2
string str = "пример (вот так вот) пример (вот так вот).";
str = Regex.Replace(str, @"\([^)]+\)\.", String.Empty);
2
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
14.11.2014, 10:27 3
fromdd, одной регуляркой не получится.
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
14.11.2014, 10:41  [ТС] 4
Цитата Сообщение от BozKurt Посмотреть сообщение
Код C#
1
2
string str = "пример (вот так вот) пример (вот так вот).";
str = Regex.Replace(str, @"\([^)]+\)\.", String.Empty);
работает, но вот теперь проблема во вложенных скобках - те если вида "(вот так (вот так) вот)." , то не срабатывает

Добавлено через 1 минуту
пробовал вот так
C#
1
@"\([\d\D]+\)\.
убирает вообще все скобки
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
14.11.2014, 11:23 5
Ну вложенные в друг-друга скобки можно убрать вот так:
C#
1
2
string str = "пример (вот так вот) пример (вот так вот).";
str = Regex.Replace(str, @"\(([^)]+\(?)*[^(]+\)\.", String.Empty);
Т.е. будет убирать вложенные друг в друга скобки: (текст (текст (текст))), но если в одни скобки будут вложены две: (текст (текст) (текст)) - то не сработает, нужно будет использовать другой подход, например, с конца строки посимвольно искать пары закрывающиеся-открывающиеся скобки, т.е. нашёл закрывающуюся +1, нашёл открывающуюся - -1, когда будет равна 0, то делаешь сабстринг от начала до этого индекса.
1
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
14.11.2014, 11:34  [ТС] 6
Цитата Сообщение от BozKurt Посмотреть сообщение
Ну вложенные в друг-друга скобки можно убрать вот так:
Код C#
1
2
string str = "пример (вот так вот) пример (вот так вот).";
str = Regex.Replace(str, @"\(([^)]+\(?)*[^(]+\)\.", String.Empty);
Т.е. будет убирать вложенные друг в друга скобки: (текст (текст (текст))), но если в одни скобки будут вложены две: (текст (текст) (текст)) - то не сработает, нужно будет использовать другой подход, например, с конца строки посимвольно искать пары закрывающиеся-открывающиеся скобки, т.е. нашёл закрывающуюся +1, нашёл открывающуюся - -1, когда будет равна 0, то делаешь сабстринг от начала до этого индекса.
очень долго работает, более 10 000 строк, предыдущие срабатывали гораздо быстрее
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
14.11.2014, 11:45 7
Ну а как ты хотел искать вложенные скобки?
В общем, я рекомендую тебе сплитить твои строки по точке, и к полученным применять вот такую конструкцию:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int ballance = 1;
int symbol = str.LastIndexOf(')') - 1;
while (ballance != 0)
{
    if (str[symbol] == ')')
        ballance++;
    if (str[symbol] == '(')
        ballance--;
    // Или одной строкой:
    // ballance = str[symbol] == ')' ? ballance + 1 : str[symbol] == '(' ? ballance - 1 : ballance;
    symbol--;
}
str = str.Substring(0, symbol + 1);
Потом собираешь в одну и на выходе будешь иметь то, что ты описал в тз.
0
14.11.2014, 11:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2014, 11:45
Помогаю со студенческими работами здесь

Регулярное выражение
Помогите составить регулярное выражения для поиска между ковычками Пример: нужно найти "Текст"....

Регулярное выражение
Имеется текст, в нем есть сумма, разделенная произвольным кол-вом пробелов(2 3 453 556 )после...

Регулярное выражение
Regex dataRegex3 = new Regex(@"Регулярка"); string str3 =...

Регулярное выражение
Не могу разобраться, что означает данное выражение ( - любой символ из скобок, \d - цифра, а вот...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru