Софтуерно Инженерство
Loading...
+ Нов въпрос
anto84 avatar anto84 16 Точки

[Technical issue] C# - regex

В момента уча за регекс и имам следния проблем:

string input = "(1+9)%6–(7%2)*8=";

искам с регекс да получа 

string [] result = ["(1+9)", "%6–", "(7%2)", "*8="]; 

тоест да разделя стригна по двата израза в скобите и резултата да запища в масив от стрингове.

Пробвам с нещо от сорта на 

string pattern = @"\(.*?\)";
string[] result = Regex.Split(input, pattern);

но не мога да го докарам.

Ще се радвам ако някой може да ми помогне.

 

 

Тагове:
0
Основи на програмирането 13/01/2015 00:55:21
Filkolev avatar Filkolev 4428 Точки
Best Answer

Ползваш ли сайтове, с които да си тестваш регексите? Аз лично съм почитател на Regex101.

Имаш според мен два проблема - самият регекс и подходът със сплитването.

Ето код, който поне с твоя пример връща правилните данни: ЦЪК.

Може да прочетеш за методът Matches ТУК. Там е описано как точно може да достъпиш всяко парче от резултата.

 

Това изглежда като задача за пресмятане на израз от стринг. Не знам дали регулярният израз ще ти помогне в случая, но има не много сложни подходи към такъв род задачи. Пробвай да я решиш, както си тръгнал, но ти препоръчвам да опиташ и нещо по-стандартно. Доста хора допускат грешката да ползват твърде advanced неща за решаване на не толкова сложни проблеми, което усложнява логиката неимоверно, без да е реално необходимо.

 

0
anto84 avatar anto84 16 Точки

Мерси, 

да ползвам сайтове за регекс но още се уча.  Ползвам

http://regexhero.net/tester/ за .NET

http://www.regexr.com/ за JavaScript

http://www.phpliveregex.com/ за php

а иначе изразът е от задача 3 на изпит C#1 от Телерик Академия от 06.12.2014 evening. условието го има в bgcoder.com. В примерното решение задачата е решена с while цикли но аз исках да пробвам и с regex.

0
Filkolev avatar Filkolev 4428 Точки

Досетих се коя е задачата, те са всъщност две такива. Няма лошо да експериментираш, със сигурност ще ти е полезно.

Иначе за сайтовете, не виждам нужда за всеки език да имаш отделен такъв. Regexr и Regex101 имат опции за избор на език, на втория даже се вижда много лесно отстрани, че може да работиш и с PHP, и с JS. За C# всичко работи, тъй че няма значение много-много сайта, езикът поддържа всичко, което съм ползвал; в това отношение JS е по-проблемен. Препоръчвам Regex101, защото показва цялата информация нагледно в панелите - всички мачове и групи, подробни обяснения какво прави изразът ти и т.н.

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Ето още един, който хваща стринговете заедно със скобите - /\(([^)]*)\)/g

Ако ти трябва да не хваща скобите, когато няма нищо в тях го промени на /\(([^)]+)\)/g

-1
13/01/2015 01:51:38