Регулярные выражения на все случаи жизни

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Сделал вот так: ([\.|\?|\!][^A-Z].*|[\.|\?|\!]\s+[^A-Z].*).
 

sistemanipel

Client
Регистрация
28.08.2013
Сообщения
29
Благодарностей
1
Баллы
3
Доброго времени суток коллеги :-) просидел честно полдня в гугле и не нашел как мне кажется простой regex как взять из строки символ по счету. Например строка: 9876 как взять первую цифру понятно ^. и с последней понятно .$ можно и на список разбить и потом брать по строкам но это лишние движения, а как взять вторую и третью по отдельности, не понял. По логике понимаю что задачка простая, но все что находил это или между символами, или {2} несколько подряд и т.д. Господа, не сочтите за труд, одскажите решение плиз
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 819
Баллы
113
Доброго времени суток коллеги :-) просидел честно полдня в гугле и не нашел как мне кажется простой regex как взять из строки символ по счету. Например строка: 9876 как взять первую цифру понятно ^. и с последней понятно .$ можно и на список разбить и потом брать по строкам но это лишние движения, а как взять вторую и третью по отдельности, не понял. По логике понимаю что задачка простая, но все что находил это или между символами, или {2} несколько подряд и т.д. Господа, не сочтите за труд, одскажите решение плиз
(?<=^.{2}).
 
  • Спасибо
Реакции: Sergodjan и sistemanipel

upravlenie

Client
Регистрация
31.12.2020
Сообщения
232
Благодарностей
16
Баллы
18
Подскажите, как вставить запятую в цифры, после второго символа?
 

Sergodjan

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

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
Подскажите плиз, как вытащить PK за одно действие регуляркой

Имеем: Country: Pakistan (PK)
Статично "Country: " а дальше уже может быть другое значение и получить нужно то что в ()
Таких строк много, но нужно именно в строке Country


Как правильно указать, что Pakistan может быть любым словом
(?<=Country:\ Pakistan\ \().*(?=\))
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
Подскажите плиз, как вытащить PK за одно действие регуляркой

Имеем: Country: Pakistan (PK)
Статично "Country: " а дальше уже может быть другое значение и получить нужно то что в ()
Таких строк много, но нужно именно в строке Country


Как правильно указать, что Pakistan может быть любым словом
(?<=Country:\ Pakistan\ \().*(?=\))

вот еще с ключом Country https://regex101.com/r/9SKjzD/1
 
  • Спасибо
Реакции: Sergodjan и deskuznetsov

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Подскажите плиз, как вытащить PK за одно действие регуляркой

Имеем: Country: Pakistan (PK)
Статично "Country: " а дальше уже может быть другое значение и получить нужно то что в ()
Таких строк много, но нужно именно в строке Country


Как правильно указать, что Pakistan может быть любым словом
(?<=Country:\ Pakistan\ \().*(?=\))
Попробуйте так: (?<=Country:\ .*?\ \().*?(?=\))
 
  • Спасибо
Реакции: deskuznetsov

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63

вот еще с ключом Country https://regex101.com/r/9SKjzD/1
Огромное спасибо! Вторая регулярка помогла. (первая находила значения и в лишних строчках)

Попробуйте так: (?<=Country:\ .*?\ \().*?(?=\))
Спасибо! Тоже работает
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Добрый день. Подскажите, пожалуйста регулярку, чтобы можно было или брать требуемый текст от слова до тэга, следующего за искомым текстом. При этом между словом и требуемым текстом может находиться рандомное количество тэгов и пробелов в различных вариациях. Либо, удалять тэги с пробелами между словом и необходимым текстом и уже потом выцеплять нужный текст между словом и следующим за текстом тэгом. Пример исходника:
HTML:
Имя актрисы </span></span> <span class="post-b">Cynthia Rothrock</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Название ролика </span></span> <span class="post-b">Queen of the Martial Arts</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Номер на сайте </span></span> <span class="post-b">v8292</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Подсайт и сайт </span></span> <span class="post-b">https://www.youtube.com/</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Год производства </span></span> <span class="post-b">2010 г.</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Жанр </span></span> <span class="post-b">Action, Drama</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Продолжительность </span></span> <span class="post-b">002442</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Описание </span></span> <span class="post-b">The Best Squad, a 1988 film watch online in high quality. After training at the police academy, where the beauties constantly kick the ears of arrogant men, they begin to perform...</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Тип HD видео </span></span> <span class="post-b">1080p</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Видео </span></span> <span class="post-b">Windows Media Video 9 1920x1080 29.97fps 8000Kbps</span></div> <div class="post-align" style="text-align center;" data-placement="center"><span style="color #1532EF;"><span class="post-b">Аудио </span></span> <span class="post-b">Windows Media Audio 44100Hz stereo 96Kbps</span></div> <span class="post-hr"><hr align="left"></span> <div class="post-align" style="text-align center;" data-placement="center">
Допустим, нужен текст:
The Best Squad, a 1988 film watch online in high quality. After training at the police academy, where the beauties constantly kick the ears of arrogant men, they begin to perform...
Между словом Описание и тэгом </span>. Сейчас я делаю следующим образом, регуляркой:
((?i)(описание|<.*?>\s*description|информация))\s*<.*?>
в цикле удаляю по одному все тэги между словом и текстом, а потом через регекс получаю текст регуляркой:
((?i)(Описание)).*?(?=(<.*?>))
Но это очень долго, да и сама программа подтормаживает от таких выражений. Может быть есть более изящное решение? Буду очень благодарен за подсказки.
 
Последнее редактирование модератором:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Но это очень долго, да и сама программа подтормаживает от таких выражений. Может быть есть более изящное решение? Буду очень благодарен за подсказки.
Если я правильно понял задачу. Первым кубиком берем блок текста, внутри будут теги, вторым действием удаляем эти теги и получаем чистый текст.
1-ая рег-ка: (?i)(?<=описание|информация|description).*?(?=</span></div>)
2-ая рег-ка: <.*?>

72722
 
  • Спасибо
Реакции: mEdvEd71

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Сейчас это выражение: ((?i)(описание|<.*?>\s*description|информация))\s*<.*?> находит слово и первый тэг: Описание </span> и помещает в переменную, которую проверяет кубик if. Я заменяю Описание </span> на: Описание. Если переменная не пустая, регулярка повторяется и помещает слово со вторым тэгом: Описание </span> в переменную. Описание </span> опять заменяется на: Описание, переменная не пустая, регулярка снова повторяется и берет слово с третьим тэгом: Описание <span class="post-b">. Описание <span class="post-b"> заменяется на Описание, регулярка выполняется еще раз. Потом тэгов уже нет:
Описание The Best Squad, a 1988 film watch online in high quality. After training at the police academy, where the beauties constantly kick the ears of arrogant men, they begin to perform...</span>
переменная пустая, кубик if перебрасывает на кубик regex с регуляркой: ((?i)(Описание)).*?(?=(<.*?>)), которая берет текст между словом и тэгом после текста. Можно ли как-то или сразу парсить текст, не учитывая тэги между словом и нужным текстом или как-то одним действием удалить эти тэги, чтобы они не мешались, а потом уже спарсить то, что нужно?
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Можно ли как-то или сразу парсить текст, не учитывая тэги между словом и нужным текстом или как-то одним действием удалить эти тэги, чтобы они не мешались, а потом уже спарсить то, что нужно?
Я привел такой вариант, всего 2 действия без циклов.
Не подошло? https://zennolab.com/discussion/threads/reguljarnye-vyrazhenija-na-vse-sluchai-zhizni.20829/post-598784
 
  • Спасибо
Реакции: mEdvEd71

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Прошу прощения. Я просто подумал, что Вы уточняли, поэтому дополнительный пост написал.:-) Буду пробовать.
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
А, если будут тэги не </span></div>, а например: </span></span> или </span><span class="post-br">, то эта регулярка: (?i)(?<=описание|информация|description).*?(?=</span></div>) ведь уже не сработает? Они постоянно варьируются, нужно что-нибудь универсальное, чтобы захватывало текст между словом и любым тэгом после этого текста.
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Вот такие тексты, для примера, можно как-то брать одной регуляркой?
Описание</span> Taxi Driver is a 1976 American psychological thriller film directed by Martin Scorsese, written by Paul Schrader, and starring Robert De Niro, Jodie Foster, Cybill Shepherd, Harvey Keitel, Peter Boyle, Leonard Harris, and Albert Brooks. Set in a decaying and morally bankrupt New York City following the Vietnam War, the film follows Travis Bickle, a taxi driver and veteran, and his mental state as he works nights in the city.<span class="post-br"></span><span class="post-b">

Описание</span> Each driver has his own order! Previously, the same order could come to several drivers, but the new distribution algorithm has been solved. Now you don't have to worry that someone else will be faster and intercept a bargain order. One trip - one driver, everything is clear and clear. Translated. See All. <br><span class="post-br"></span><span class="post-b">

Описание</span> Apocalyptica are true explorers, always seeking new frontiers and uncharted territories in which to express themselves. With Cell-0 , their 9th studio album, the ambitious and electric quartet have not simply returned to their non-vocal roots, they have traveled deeper and further into the universe of instrumental music than ever before. ... Georgia and The South Sandwich Islands Spain Sri Lanka Sudan Suriname Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand <div class="post-align" style="text-align center;" data-placement="center">
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Еще хотел спросить. Вот эта регулярка <.*?> ищет все тэги. А как тогда будет выглядеть выражение поиска любых символов за исключением тэгов? Так: [^<.*?> ] ? Например, нужно найти все тэги от Описание до первого не тэга, такое выражение возможно как-то составить?

Описание</span> <br></span><span class="post-b"> Each driver has his own order! Previously, the same order could come to several drivers, but the new distribution algorithm has been solved. Now you don't have to worry that someone else will be faster and intercept a bargain order. One trip - one driver, everything is clear and clear. Translated. See All. <br><span class="post-br"></span><span class="post-b">
 

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
И как найти только те тэги, которые находятся в тексте? Например:

Описание</span> <br></span><span class="post-b"> Each driver has his own order! <img class="smile" src="//static.zennolab.net/smiles/icon_cool.gif" alt=":cool:" align="absmiddle" border="0" />Previously, the same order could come to several drivers, but the new distribution algorithm has been solved. <br>Now you don't have to worry that someone else will be faster and intercept a bargain order.<br> One trip - one driver, everything is clear and clear. <br>Translated. See All. <br><span class="post-br"></span><span class="post-b">.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
mEdvEd71 Если такая разноплановая верстка, привязаться будет сложно.
Приложил пример шаблона универсального извлечения описания.
Первым действием задаем критерий минимального кол-ва символов в строке, которое нужно забрать. Если описания дорстаточно длинные, то можно оставить пока 50, как задано в примере. Вторым действием убираем все html-теги. Третьим действием - производим взятие описания.

72756
 

Вложения

  • Спасибо
Реакции: mEdvEd71

mEdvEd71

Client
Регистрация
03.01.2021
Сообщения
167
Благодарностей
7
Баллы
18
Благодарю Вас. А можно в xml шаблон? Количество символов, которые нужно брать тоже разное. К примеру:
date: 31.10.2009
date: 31 october 2009
date: 2009
genre: feature film, action, adventure, drama
genre: feature film, action
genre: drama
cast: Robert De Niro, Jodie Foster, Cybill Shepherd, Harvey Keitel, Peter Boyle, Leonard Harris
cast: Robert De Niro, Jodie Foster
cast: Jodie Foster
description: Taxi Driver is a 1976 American psychological thriller film directed by Martin Scorsese, written by Paul Schrader, and starring Robert De Niro, Jodie Foster, Cybill Shepherd, Harvey Keitel, Peter Boyle, Leonard Harris, and Albert Brooks. Set in a decaying and morally bankrupt New York City following the Vietnam War, the film follows Travis Bickle, a taxi driver and veteran, and his mental state as he works nights in the city.
description: Taxi Driver is a 1976 American psychological thriller film.
description: Taxi Driver is a 1976 American psychological thriller film directed by Martin Scorsese.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Благодарю Вас. А можно в xml шаблон? Количество символов, которые нужно брать тоже разное.
Приложил: извлечение описания-1.xmlz
В качестве критерия кол-ва символов, можно например попробовать использовать число 100 или 150. Думаю, что описания в основной массе будут более длинными.

Также прикрепил еще один вариант шаблона, в котором без заранее заданного количественного критерия просто берется самая длинная текстовая строка, как претендент на описание: извлечение описания-2.xmlz В этом варианте все строки кладутся в таблицу, вычисляется символьная длина каждой строки и таблица сортируется по убыванию кол-ва символов и потом берется самая первая строка, соотв. самая длинная (она же - описание).
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: mEdvEd71

Dozer009

Client
Регистрация
26.11.2012
Сообщения
156
Благодарностей
6
Баллы
18
C#:
(?<!\S)\d(?!\S)
поиск однозначного числа, очень долго искал наконец нашлось решение
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Ребята, беру строку из файла txt, нужно обработать только два значения перед разделителем ; в переменные отдельные, остальные значения после разделителя запихнуть в одну переменную.
Пример

1;2;3;4


должно получится так
переменная 1 = 1
переменная 2 = 2
переменная 3 = 3;4
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Ребята, беру строку из файла txt, нужно обработать только два значения перед разделителем ; в переменные отдельные, остальные значения после разделителя запихнуть в одну переменную.
Пример

1;2;3;4


должно получится так
переменная 1 = 1
переменная 2 = 2
переменная 3 = 3;4
Можно двумя стандартными действиями, без регулярок:

73116
 
Последнее редактирование:
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Можно двумя стандартными кубиками:

Посмотреть вложение 73116
Вариант отличный, но я не знаю как предусмотреть, если в строке 5 раздетелей, а в другой 4 разделителя

1;2;3;4;5
1;2;3;4

Мне главное брать 1;2 в и раскладывать в переменные, остальные хвосты в другую переменную.
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Вариант отличный, но я не знаю как предусмотреть, если в строке 5 раздетелей, а в другой 4 разделителя

1;2;3;4;5
1;2;3;4

Мне главное брать 1;2 в и раскладывать в переменные, остальные хвосты в другую переменную.
Если по-быстрому, без регулярок все же, то можно через список.
То есть кладем в список, берем первые две строки с удалением в переменные var1 и var2, а остальное содержимое списка объединяем с разделителем ; в переменную var3.

73118
 
Последнее редактирование:
  • Спасибо
Реакции: udder

igoreff

Client
Регистрация
24.02.2011
Сообщения
189
Благодарностей
24
Баллы
18
Подскажите пожалуйста, нужно спарсить ссылку такого вида "https://site.com/register/dfj9DJ5Hfhf4j5"

Домены бывают разные, в конце тоже набор букв-цифр разный, хотелось бы, что бы регулярка искала по кавычкам в начале и в конце и по признаку в середине /register/ именно со слэшем в конце и начале, возможно такое?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Подскажите пожалуйста, нужно спарсить ссылку такого вида "https://site.com/register/dfj9DJ5Hfhf4j5"

Домены бывают разные, в конце тоже набор букв-цифр разный, хотелось бы, что бы регулярка искала по кавычкам в начале и в конце и по признаку в середине /register/ именно со слэшем в конце и начале, возможно такое?
Есть универсальная регулярка из почтового экшена в ПМ: (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])? Очень хорошо подходит для поиска подобных ссылок.

74086
 
  • Спасибо
Реакции: igoreff и one

igoreff

Client
Регистрация
24.02.2011
Сообщения
189
Благодарностей
24
Баллы
18
Спасибо, но проблема в том, что там еще куча ссылок бывает и не всегда номер совпадения одинаковый, поэтому и хотелось что б понадежнее, именно по признаку /register/ искать.
 

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