Wpis z mikrobloga

Mircy, czy możliwe jest stworzenie wyrażenia regularnego które będzie szukało określonego wyrazu?

Druga część pytania - czy jeśli już mam regex który szuka dwóch wyrazów, to czy możliwe jest stworzenie takiego wyrażenia, które je pogrupuje tak, że w jednej grupie będzie dany string i liczba która się pojawia po nim (nie bezpośrednio) i w drugiej grupie to samo tylko z drugim stringiem i drugą liczbą?

Z której strony ugryźć ten temat? Gdzie znajdę materiały które mnie wtajemniczą w rozwiązanie tego?

#programowanie #wyrazeniaregularne #regex #python #pytaniedoeksperta #pomocy #informatyka
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@tamian:
Jeśli dobrze rozumiem - powiedzmy, że w tekście szukasz słów 'adam' oraz 'ewa' oraz liczb po nich.
Masz: "adam mial 23 lata, natomiast ewa miala dopiero 17 lat, kiedy się poznali
I chcesz otrzymać coś w stylu: ['adam', 23], ['ewa', 17] ?
  • Odpowiedz
@tamian: Jeśli tak to:

import re
>>> a = "adam mial 23 lata, natomiast ewa miala dopiero 17 lat, kiedy się poznali"
>>> b = '(adam|ewa)[\D]+([\d]+)'
>>> print(re.findall(b, a))
[('adam', '23'), ('ewa', '17')]
  • Odpowiedz
@venomik: Genialne! Wielkie dzięki! W sumie to gotowe rozwiązanie jest dla mnie tylko połową sukcesu... Chciałbym się nauczyć sam pisać wyrażenia regularne, ale nie mam pojęcia gdzie mogę zacząć się uczyć. Chodzi o podstawy podstaw. Byłbyś w stanie polecić jakieś sprawdzone źródło?

A samo wyrażenie działa idealnie, dokładnie tak jak sobie to wymarzyłem ;)
  • Odpowiedz
@tamian: Twoje szczęście, że jak na bordo przystało w piątek w nocy mogę siedzieć na wykopie i pomagać w programowaniu ;)

A tak poważniej. Jako wprowadzenie bardzo spoko jest ten tutorial:
https://regexone.com
Bo automatycznie możesz sobie ćwiczyć przy nim.
Jak chcesz sobie ćwiczyć samodzielnie to polecam
  • Odpowiedz
@venomik: Dziękuję ślicznie. O tym tutorialu nie wiedziałem, natomiast o regex101.com wiedziałem i testowałem na nim już kilka wyrażeń, również teraz próbowałem wyczarować coś użytecznego, ale nieskutecznie.
Właśnie chyba największy problem mam ze zrozumieniem logiki wyrażeń regularnych. Nikt mi tego dobrze nie przedstawił / nie trafiłem na dobry tutorial dla laika. Przerobie to co na regexone.com i zobaczymy jak to będzie :)
Faktycznie, jak przedstawiłeś krok po kroku swój regex,
  • Odpowiedz
po co opakowujesz sekwencje kwadraciakami? \D+(\d+) zrobi dokładnie to samo.


@luzny_lori:
Bo początkowo miałem tam [a-zA-Z\s] zamiast \D (bo z takich wyrażeń regularnych muszę częściej korzystać). Ale po chwili namyslu uznałem, że @tamian niekoniecznie i zmieniłem na \D i \d, tylko już nawiasów nie usunąłem.

@tamian: Przyjdzie z czasem. I wcale nie tak odległym - przerobisz kilkanaście zadań na wyrażeniach regularnych to nagle ich
  • Odpowiedz
@venomik: Hmm... przerabiam już ten regexone.com i idzie całkiem nieźle :D
W którym miejscu okłamałeś? Czyżby chodziło o nawiasy okrągłe? (nie wiem, strzelam xd)
  • Odpowiedz