Простая регулярка для разбиения через двоеточие

melutsk

Client
Регистрация
03.08.2016
Сообщения
1 348
Благодарностей
1 259
Баллы
113
Есть данные
423523523:3245345634
надо до : число внести в переменную 1, а после : в переменную 2, как это сделать через регулярку?
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Привяжи текст как таблицу, и распределяй ячейки по переменным.
Или в конструкторе регулярок делай регулярку и экшеном обработка текста обработай.
 
  • Спасибо
Реакции: melutsk

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Код:
([^:]+):([^:]+)
Групповая регулярка. Номер совпадения выбрать 0. 1 - в первую переменную, 2 - во вторую
 
  • Спасибо
Реакции: melutsk

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Код:
([^:]+):([^:]+)
Групповая регулярка. Номер совпадения выбрать 0. 1 - в первую переменную, 2 - во вторую
Хочешь сказать за 1 присест, можно в две переменных спарсить данные?
 
  • Спасибо
Реакции: melutsk

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
  • Спасибо
Реакции: melutsk

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
  • Спасибо
Реакции: melutsk

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Меня лично смущает выпадающее меню "Номер совпадения" и внизу мы выбираем "Номер совпадения", так что именно делает первое меню?
 
  • Спасибо
Реакции: melutsk

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Можешь скрин показать с примером?
Я могу так хоть 20 совпадений все по очереди в переменные загнать?
можешь, если правильно регулярку составишь. Нужно понимать, что это не направление обычных совпадений, а направление групп совпадений
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Меня лично смущает выпадающее меню "Номер совпадения" и внизу мы выбираем "Номер совпадения", так что именно делает первое меню?
0 савпадение - номер совпадния по группе. 1,2 и т.д. - номер совпадения внутри группы. Есть и нулевое, но в нём будет весь текст, найденный ругялркой, а начиная с 1го уже будут групповые значения
 
  • Спасибо
Реакции: melutsk и one

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
0 савпадение - номер совпадния по группе. 1,2 и т.д. - номер совпадения внутри группы. Есть и нулевое, но в нём будет весь текст, найденный ругялркой, а начиная с 1го уже будут групповые значения
Очень все запутанно =)
 
  • Спасибо
Реакции: melutsk

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Очень все запутанно =)
есть текст
1:2
3:4
5:6

Есть регулярка
Код:
(\d+):(\d+)
Сама по себе такая регулярка найдёт 3 значения
[0] 1:2
[1] 3:4
[2] 5:6

Выделенные номера - номера совпадений. Тут всё просто. Но в регулярках есть скобки, а значит будут записанны ещё группы. Нулевое совпадение по группе - всегда вся строка, найденная регуляркой. Дальше уже сами группы в скобках
Таким образом для строки, например, 3:4 группы будут выглядеть так
[0] 3:4
[1] 3
[2] 4

Имеет что-то типа двумерного массива. Если объединить индексаций, где первое число - индекс совпадение, второе - индекс группы, то получим
[0][0] 1:2
[0][1] 1
[0][2] 2

[1][0] 3:4
[1][1] 3
[1][2] 4

[2][0] 5:6
[2][1] 5
[2][2] 6

как-то так
 

Шива

Client
Регистрация
05.02.2018
Сообщения
1 088
Благодарностей
341
Баллы
83
Столько сообщений и никто не сказал про сплит (((((
 
  • Спасибо
Реакции: bad robot

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
Есть данные
423523523:3245345634
надо до : число внести в переменную 1, а после : в переменную 2, как это сделать через регулярку?
Вот такой регуляркой иногда пользуюсь:
Код:
((?<=(^|:|;)).*?(?=(:|;|$|\r\n)))
Это универсальная регулярка для двоеточия и точки-с-запятой в роли разделителя.
Работает через два кубика Обработка текста, в первом кубике - 0-ое совпадение, во втором 1-ое..
Достоинство такого способа, что можно разбирать строки с бо'льшим, чем два, кол-вом данных между разделителями.
Еще нравится с таблицей вариант, где разбор по переменным, тоже пользуюсь..
 
Последнее редактирование:
  • Спасибо
Реакции: JanCarlo и melutsk

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
  • Спасибо
Реакции: bezvozni и melutsk

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Вот такой регуляркой иногда пользуюсь:
Код:
((?<=(^|:|;)).*?(?=(:|;|$|\r\n)))
Это универсальная регулярка для двоеточия и точки-с-запятой в роли разделителя.
Работает через два кубика Обработка текста, в первом кубике - 0-ое совпадение, во втором 1-ое..
Достоинство такого способа, что можно разбирать строки с бо'льшим, чем два, кол-вом данных между разделителями.
Еще нравится с таблицей вариант, где разбор по переменным, тоже пользуюсь..
Скажите пожалуйста, а как в таком случае быть?

У меня в пемеренной лежит вот такой текст -

C:\folder\img\1.jpg;C:\folder\img\01017(2).jpg;C:\folder\img\03-lovlya-yazya-na-udochku.jpg;C:\folder\img\0626-fish-dlya-rybalki.jpg;C:\folder\img\0627-dlya-rybalki.jpg
То есть в строчку прописаны 5 ссылок на картинки, разделены они ";"
Как сделать регулярку, что бы из этих ссылок вырезались вот эти данные И сразу же перекидывались в 5 разных переменных? собственно сама регулярка то вот - (?<=folder).*?jpg


мне эти 5 строк, надо раскидать в 5 переменных так же как тут у @doc, но у меня только одно совпадение записывается =(

 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
Скажите пожалуйста, а как в таком случае быть?

У меня в пемеренной лежит вот такой текст -

C:\folder\img\1.jpg;C:\folder\img\01017(2).jpg;C:\folder\img\03-lovlya-yazya-na-udochku.jpg;C:\folder\img\0626-fish-dlya-rybalki.jpg;C:\folder\img\0627-dlya-rybalki.jpg
То есть в строчку прописаны 5 ссылок на картинки, разделены они ";"
Как сделать регулярку, что бы из этих ссылок вырезались вот эти данные И сразу же перекидывались в 5 разных переменных? собственно сама регулярка то вот - (?<=folder).*?jpg


мне эти 5 строк, надо раскидать в 5 переменных так же как тут у @doc, но у меня только одно совпадение записывается =(

Можно записать в список и брать в цикле, по мере необходимости.
Так ли уж необходимо их все в разные переменные записывать?
 
  • Спасибо
Реакции: JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Можно записать в список и брать в цикле, по мере необходимости.
Так ли уж необходимо их все в разные переменные записывать?
Циклом сложно, нужно именно в разные переменные записывать что бы потом отображать все эти 50 картинок в документе. Есть список где 50 ссылок на картинки, и надо ссылки (предварительно регуляркой обрезав до \img\name.jpg) на эти картинки записать в 50 разных переменных, циклом по моему не получиться в разные переменные записывать
 

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Согласен, получается лес лесной. Самый простой вариант это в два кубика решить эту задачу, первый - сишарп, регуляркой находит все значения и раскидывает их по переменным (в каждом списке у меня строго определенное количество ссылок, по этому я точно заранее знаю сколько всего будет регуляркой найдено результатов и соответственно сколько необходимо переменных) , вторым кубиком очищаем из ссылки все ненужное. Но вот я не знаю как код накидать
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
C#:
var x = project.Variables["str"].Value.Split(':');
project.Variables["res1"].Value = x[0];
project.Variables["res2"].Value = x[1];
в переменной str должна быть строка вида xxxxxx:yyyyyyy
так же должно быть 2 переменные res1 и res2 ... в первой окажется xxxxxxx, а во второй yyyyyy
 
  • Спасибо
Реакции: Igorii и JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
C#:
var x = project.Variables["str"].Value.Split(':');
project.Variables["res1"].Value = x[0];
project.Variables["res2"].Value = x[1];
в переменной str должна быть строка вида xxxxxx:yyyyyyy
так же должно быть 2 переменные res1 и res2 ... в первой окажется xxxxxxx, а во второй yyyyyy
ну и соответственно если в переменной aaa:bbb:ccc то и в три переменные все запишется? а как добавить регулярку к этому коду, что бы регуляркой из xxxxx:yyyyy:ssss определенный кусок вырезался и так же
в переменные записывался? мне собственно только это и надо было :-)
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
ну и соответственно если в переменной aaa:bbb:ccc то и в три переменные все запишется?
если добавить
C#:
project.Variables["res3"].Value = x[2];
то да

а как добавить регулярку к этому коду, что бы регуляркой из xxxxx:yyyyy:ssss определенный кусок вырезался и так же
в переменные записывался?
в зависимости от необходимого куска может быть разная регулярка
 
  • Спасибо
Реакции: JanCarlo

GrafSpell

Client
Регистрация
14.07.2017
Сообщения
30
Благодарностей
11
Баллы
8
Согласен, получается лес лесной. Самый простой вариант это в два кубика решить эту задачу, первый - сишарп, регуляркой находит все значения и раскидывает их по переменным (в каждом списке у меня строго определенное количество ссылок, по этому я точно заранее знаю сколько всего будет регуляркой найдено результатов и соответственно сколько необходимо переменных) , вторым кубиком очищаем из ссылки все ненужное. Но вот я не знаю как код накидать
как вариант вот
C#:
int count = project.Variables["имя_переменной"].Value.Split(':').Length;

if(count > 0)
    for (int i = 0; i < count; i++)
        project.Variables["var" + (i + 1)].Value = Regex.Match(project.Variables["имя_переменной"].Value.Split(':')[i], @"(?<=folder).*?jpg").Value;
на выходе получиться
var1 = \img\1.jpg
var2 = \img\01017(2).jpg
var3 = \img\03-lovlya-yazya-na-udochku.jpg
var4 = \img\0626-fish-dlya-rybalki.jpg
var5 = \img\0627-dlya-rybalki.jpg
 
  • Спасибо
Реакции: JanCarlo

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Скажите пожалуйста, а как в таком случае быть?

У меня в пемеренной лежит вот такой текст -

C:\folder\img\1.jpg;C:\folder\img\01017(2).jpg;C:\folder\img\03-lovlya-yazya-na-udochku.jpg;C:\folder\img\0626-fish-dlya-rybalki.jpg;C:\folder\img\0627-dlya-rybalki.jpg
То есть в строчку прописаны 5 ссылок на картинки, разделены они ";"
Как сделать регулярку, что бы из этих ссылок вырезались вот эти данные И сразу же перекидывались в 5 разных переменных? собственно сама регулярка то вот - (?<=folder).*?jpg


мне эти 5 строк, надо раскидать в 5 переменных так же как тут у @doc, но у меня только одно совпадение записывается =(

Потому что если как у Дока, то регулярка должна всю строку находить а не нужный участок. А уже то что в круглых скобках регулярки будет находить нужные фрагменты:
Код:
[^;]+\\folder([^;]+\.jpg);[^;]+\\folder([^;]+\.jpg);[^;]+\\folder([^;]+\.jpg);[^;]+\\folder([^;]+\.jpg);[^;]+\\folder([^;]+\.jpg)
reg.png
 
  • Спасибо
Реакции: JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
@orka13
@GrafSpell
@WebBot
@sergodjan66
Спасибо ребят, вы очень помогли, все получилось что надо. Остался последний вопрос
Есть строка -
C:/Doorway/img/aec609402220fabdb3f74b33f760334c.jpg;C:/Doorway/img/altrusim-afticifl.jpg;C:/Doorway/img/b1f31f13-4d0b-4b68-8da9-5a247c2bb94d.jpeg;C:/Doorway/img/b5ac6e21-8594-4a78-b7aa-87c8f0761464.jpg;C:/Doorway/img/b72e1b7e-f540-4d38-a739-96f56354f6d4.jpg;C:/Doorway/img/banner-horizontal.jpg;C:/Doorway/img/banner.jpg;C:/Doorway/img/c4077ae103e839465093026503f8879b.jpg;C:/Doorway/img/c423a386-f52e-4f14-aa86-e913eab85e97(1).jpg;C:/Doorway/img/c423a386-f52e-4f14-aa86-e913eab85e97.jpg;C:/Doorway/img/ca66d3b7-b4b4-463e-8535-f3e39b13c732.jpeg;C:/Doorway/img/chris-evola.jpg;C:/Doorway/img/customize-fishing-twitching-lures-rechargeable-led-hard-baits-iscas-minnow-jerkbait.jpg;C:/Doorway/img/d1zyomfwwaipde4.jpg;C:/Doorway/img/d6x-twdxkaigkar.jpg;C:/Doorway/img/d7z2spdxoaaqkps.jpg;C:/Doorway/img/d8b1dd425898d56ec37e63e6bca48bba.jpg;C:/Doorway/img/deqxhr1v0pkkwrzkirypnutzliiw4uncuwxfo_mlmxpkiwmtmycun1tjfr6d3qeg.jpg;C:/Doorway/img/dlya-kakikh-ryb-podkhodit-fish-megabomb.jpg;C:/Doorway/img/dqb1q1zwkaavlv_.jpg
вот этой регуляркой - (?<=Doorway).*?jpg я получил 18 результатов и все с расширениями jpg - вот как тут


, вопрос - как в одну регулярку добавить 2 расширения jpg и jpeg? так как этой регуляркой я потерял считай сразу 2 ссылки на 2 картинки. вернее даже 4 получается. Не охото делать перебор строк с заменами, громоздить лишние кубы :D
у меня есть списки со строго заданным количеством картинок, 5-10-15-20-25, нужно регуляркой получить именно все 5-10-15-20-25 картинок, но форматы картинок иногда бывают jpg и jpeg

Заранее спасибо
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
  • Спасибо
Реакции: JanCarlo

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
  • Спасибо
Реакции: JanCarlo

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
351
Благодарностей
52
Баллы
28
Регистрация
08.12.2020
Сообщения
9
Благодарностей
0
Баллы
1

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