Regex - pomocy

0

Witam, zacząłem ostatnio bawić się Regexem i mam pewien problem.

Jak wyciągnąć z tego samo ' km²' za pomocą re.search?
"Według danych z roku 2002[5] gmina Wiskitki ma obszar 150,94 km², w tym:

Jak wyciągać liczbę% po wybranym wyrazie za pomocą re.search?
"użytki rolne: 72%
użytki leśne: 20%"

0

ja bym to zrobił tak

>> p = re.findall("([0-9]+) km²", "123132 km²")
>>> print(p)
['123132']



>>> p = re.findall("([0-9]+)%", "cos 72%")
>>> print(p)
['72']

Możesz poczytać więcej o (grupach) w regexie tutaj
https://docs.python.org/3/howto/regex.html#grouping

1

Wie Pan może czy się w jakiś sposób zignorować cześć "wyszukania" i wybrać tylko km2?

Znaczy chcesz mieć wyrażenie regularne, które łapie tylko km²? To to będzie wyrażenie "km²". Jeśli nie, i nie chodzi Ci o rozwiązanie podane przez nullpt4 (a chyba nie, bo u niego pod postem to komentowałeś…), to o co? Jaką chcesz mieć odpowiedź do podanych przez Ciebie stringów?

0

Rozwiązanie Pana nullpt nie sprawdzi się, ponieważ gdy będzie inna jednostka już będzie problem. Stała zawsze będzie liczba z przecinkiem, a ja chciałbym jednostkę, która jest obok i składa się z 2 lub 3 znaków.

0

"użytki rolne: 72%
"użytki leśne: 20%"

Jeżeli mój scrapper odpalę na inną gminę to liczby będą już inne, ale zgadzać się zawsze będzie "rolne" i "leśne". Chciałbym żeby pobierało mi liczbę i jednostkę po danym słowie.

0

O, i teraz można zrozumieć, o co pytasz — chcesz mieć dwu- lub trzyznakowy ciąg, który występuje po ułamku dziesiętnym.

Zatem: \d+,\d (.{2,3}) Ewentualnie \d+,?\d (.{2,3}), jeśli przecinek jest opcjonalny.

0

Niestety nie działa.

screenshot-20200904154557.png

0

A w poprawionym jest niestety 94 km2.

screenshot-20200904154704.png

0

A dla wyrażenia łapiącego po rolne: albo leśne:, to będzie: (rolne|leśne): (\d+)% (i bierzesz tylko drugą grupę). Ew. (rolne|leśne): (\d+%), jeśli chcesz łapać też symbol pierwiastka.

0

Podpowie Pan jak wybrać daną grupę? :)

1

Faktycznie — problemem jest to, że masz po tej jednostce przecinek (więc nie jest już ona dwu- lub trzyznakowym ciągiem znaków). Można dopisać \W, żeby go połknąć, co ostatecznie tworzy: \d+,\d+ (.{2,3})\W? lub \d+,?\d+ (.{2,3})\W?.

0

Wszystko pięknie działa! Dziękuje bardzo i życzę udanego weekendu!

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