Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Помощь по regex (Регулярные выражения)

675  
7495 знакомое лицо03.04.21 06:06
7495
03.04.21 06:06 

Помогите собрать шаблон regex для следующих строк:


<a class='text-primary' href='/token/0xae8488e75493b89a0e1488bf91542208c416f486'>BUZcoin (BUZ)</a>
<a class='text-primary' href='/token/0x13601888f649c96383812ec45c608b4e7da5e899'>Bablos Token (BABLOS)</a>
<a class="text-primary" href="/token/0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5">Decentralized Putin (PUTIN)</a>

на выходе должно остаться:


0xae8488e75493b89a0e1488bf91542208c416f486, BUZcoin, BUZ
0x13601888f649c96383812ec45c608b4e7da5e899, Bablos Token, BABLOS
0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5, Decentralized Putin, PUTIN

сам пробовал, типа "токен(.*)а" - первый раз вырезает нормально, затем прихватывает весь текст до последнего тега а.

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#1 
schizo коренной житель03.04.21 10:06
schizo
NEW 03.04.21 10:06 
в ответ 7495 03.04.21 06:06

a может и в токене попасться.

наверное так token(.*)?\/a

не проверял

Храни Вас Г-дь!
#2 
schizo коренной житель03.04.21 10:13
schizo
NEW 03.04.21 10:13 
в ответ schizo 03.04.21 10:06

даже во так

/.+?(?=\/a)/

Храни Вас Г-дь!
#3 
7495 знакомое лицо03.04.21 14:40
7495
NEW 03.04.21 14:40 
в ответ schizo 03.04.21 10:06
не проверял


Спасибо, вот так выглядят оба варианта, если пропустить образец из моего первого поста:


но сожалению оба случая не работают как надо, если запустить с оригинальным сайтом. С большим текстом первый вариант начинает с tokens" и захватывает почти весь текст страницы заканчивает на а,

второй вариант начинает с //availableAd захватывает весь текст и заканчивает на src="/


а ещё я заметил в моём образце ошибки, во-первых путин там две точечки, а надо все с одной точечкой и текст не в три строки, а сплошняком как на оригинальной странице, поэтому новый образец:


blablabla <a class='text-primary' href='/token/0xae8488e75493b89a0e1488bf91542208c416f486'>BUZcoin (BUZ)</a> blablabla blablabla <a class='text-primary' href='/token/0x13601888f649c96383812ec45c608b4e7da5e899'>Bablos Token (BABLOS)</a> blablabla blablabla <a class='text-primary' href='/token/0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5'>Decentralized Putin (PUTIN)</a> blablabla


проверять можно онлайн на regex101.com - https://regex101.com/r/9wNbfv/1


И почему регекс захватывает весь текст после первого совпадения? например мой другой регекс: собирает все майлы со страниц и складывает столбиком без проблем:

(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#4 
schizo коренной житель03.04.21 14:52
schizo
NEW 03.04.21 14:52 
в ответ 7495 03.04.21 14:40

регексы по умолчанию прожорливые (greedy), поэтому знак вопроса. исправьте во втором примере на ?=</a

Храни Вас Г-дь!
#5 
MrSanders коренной житель03.04.21 18:02
NEW 03.04.21 18:02 
в ответ 7495 03.04.21 14:40
/<a.+?href='\/token\/(\w+)'>([\w\s]+) \((\w+)\)/g
#6 
  moose коренной житель03.04.21 22:00
NEW 03.04.21 22:00 
в ответ 7495 03.04.21 06:06

я вам просто напишу, что вы хотите извлечь, и вы сами напишете прелестное выражение.

вам нужно выбрать все между

началостроки<a class='text-primary' href='/token/

и

</a>конецстроки

если я правильно понял, то это - примитифф. если неправильно, поясните в чем.

#7 
anly патриот05.04.21 23:00
anly
NEW 05.04.21 23:00 
в ответ 7495 03.04.21 06:06

Regex replace

(.+)(0x\w*)([^\w]+)([\w ]+)([^\w]+)([\w ]+)(.+)

$2, $4, $6


результат

0xae8488e75493b89a0e1488bf91542208c416f486, BUZcoin , BUZ

0x13601888f649c96383812ec45c608b4e7da5e899, Bablos Token , BABLOS

0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5, Decentralized Putin , PUTIN

Проклят нарушающий межи ближнего своего (Втор.27:17)
#8 
7495 знакомое лицо06.04.21 02:32
7495
NEW 06.04.21 02:32 
в ответ anly 05.04.21 23:00

anly

Спасибо. Отвечу всем одним постом.


MrSanders


/<a.+?href='\/token\/(\w+)'>([\w\s]+) \((\w+)\)/g


К сожалению, моя программа не поддерживает флаг /g для глобального поиска, а объединить 3 группы я не смог. Спасибо.




moose


если я правильно понял, то это - примитифф. если неправильно, поясните в чем.


Вы правильно поняли, я раньше шаблонами регекс пользовался, но сам их не составлял, моя проблема была ограничить выборку спереди и сзади.


С помощью от schizo (третий пост) + мои исправления, актуальная рабочая версия: (?<=' href='/token/).+?(?=</a)


На выходе получаю, почти то что хотел, проблема была решена через пару часов после постановки вопроса на форуме, всем спасибо.


Кстати, у регекс много диалектов, для перл одно для руби и с итд другое, на одной машине может работать на другой нет.



Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#9