Wyrażenia regularne, import re

0

Witam. Mam pewne zadanie, gdzie muszę z tekstu wyciągnąć inicjały i nazwiska odkrywców. Zrobiłem tyle i nie wiem czemu nic mi nie wyświetla:

planetoidy = '''(1) Ceres 2,7653 1 stycznia 1801 G. Piazzi
(2) Pallas 2,7722 28 marca 1802 H. W. Olbers
(3) Juno 2,6701 1 września 1804 K. Harding
(4) Westa 2,3619 29 marca 1807 H. W. Olbers
(5) Astraea 2,5771 8 grudnia 1845 K. L. Hencke
(6) Hebe 2,4256 1 lipca 1847 K. L. Hencke
(7) Iris 2,3856 13 sierpnia 1847 J. R. Hind'''

 import re

for odkrywca in re.finditer(r'\[A-Z]\$',planetoidy):
    print(odkrywca.group()) ```
1

https://regex101.com/r/l62gFv/1

możesz się bawić na żywo, po prawej jest wszystko wyjaśnione, na dole po prawej masz docs.

0

A jak mógłbym wywołać te pierwsze litery? Chodzi mi o te inicjały, jeśli [A-Z] nie działa to w jaki sposób?

0

Mam coś takiego

r'\w?[A-Z].\s.+'

Chyba nie jest najoptymalniejsza no ale jest XD

0

Mam jeszcze takie pytanie. Jakbym chciał złączyć te dwie rzeczy np. Inicjały z nazwiskami i do tego te liczby 2,7.... itd. to jak mógłbym to zrobić?

(1) Ceres 2,7653 1 stycznia 1801 G. Piazzi ===> 2,7653 G. Piazzi

Chodzi mi o coś takiego

2

A tak na marginesie, czy to musi być koniecznie regex? Bo jeżeli masz tak powtarzalny format danych to spróbowałbym pomóc sobie Pythonem. Np. :

for line in planetoidy:
   columns = line.split()
   return f'{columns[2]} {columns[6]} {columns[7]}'

Wtedy problem staje się trywialny.

A liczby w regexie możesz wyłapać tak:

([0-9]+,?[0-9]*)

Żeby nie wyłapać też () możesz dodać spacje wokół albo zrobić look behind:

 ([0-9]+,?[0-9]*) 
(?<=\([0-9]\))([0-9]+,?[0-9]*)
0

Nie musi być tylko myslałem że mogę zrobić coś w stylu 'r( "jeden przykład" + "drugi przykład", blabla) no ale jak się tak nie da no to trudno. Dzięki wszystkim za pomoc :)

0

Da się - po to masz capturing i non capturing groups. Możesz składać w regexie bardziej skomplikowane wyrażenia. Np

(wyrażenie) (:?non capturing group) (wyrażenie2)
Zwróci Ci grupy 1,2 i ogólna gdzie leci to czego nie przechwyciles w innych grupach

0

Aha. No dobra. To poczytam jeszcze coś o tym w necie. Wielkie dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1