Janusz Barbacki

Janusz Barbacki Jack of all IT
trades, currently
procurement
specialist a...

Temat: python reg ex wartość pomiedzy dwoma znakami

mam taki string : u' 1 249,00 z\u0142'

i chce z niego wyciągnąć 1 249,00

wiem że da się to zrobić np. z a pomocą split() i paru innych sposobów
ale ma to być użyte w HtmlXPathSelector w scrappy więc chcę zrobić to za pomocą regex że by nie mnożyć instrukcji

próbowałem
u'(.*?)z
i
u'.*?z
ale nie zwraca to żadnych wyników

Jak pewnie widać nie mam pojęcia o regex - korzystam tylko jak muszę z manualem pod ręką

dla ogarniętych w scrapy linijka - może tu jest błąd choć wątpie

hxs.select('//span[@class="iPriceBN"]/text()').re(r"u/'.*?z")
Janusz Barbacki edytował(a) ten post dnia 21.12.11 o godzinie 12:10

konto usunięte

Temat: python reg ex wartość pomiedzy dwoma znakami

Spróbuj z
u'([^z]*)z'
Janusz Barbacki

Janusz Barbacki Jack of all IT
trades, currently
procurement
specialist a...

Temat: python reg ex wartość pomiedzy dwoma znakami

prubowałem
test = hxs.select('//span[@class="iPriceBN"]/text()').re(r"u'([^z]*)z'")


chociaż teraz nie jestem pewien czy błąd nie wynika z cudzysłowów lub nie escape'owanych znaków
Mariusz Marcinkiewicz

Mariusz Marcinkiewicz Bezpiecznik, admin,
programista,
pentester

Temat: python reg ex wartość pomiedzy dwoma znakami

Literka u na poczatku to jedynie oznaczenie (dodane przez Pythona w momencie wyswietlania stringu) informujace ze string zawiera znaki unicode. Natomiast Ty dodajesz to niepotrzebnie do regexpa i domyslam sie ze w tym tkwi caly problem.
Prawidlowy regexp moglby wyglac np. tak:
" ([\d\s,]+) z"

konto usunięte

Temat: python reg ex wartość pomiedzy dwoma znakami

Ja bym to zrobił tak:

"(\d[\d\s]*,\d+)"


I tłumaczę:
\d - jedna cyfra (zaczynam od tego, żeby pominąć początkowe białe znaki)
[\d\s]* - zero lub więcej razy cyfra lub biały znak
, - przecinek
\d+ - co najmniej jedna cyfra

Jeśli istnieje możliwość, że kwoty będą bez części ułamkowej, to daj

"(\d[\d\s]*(?:,\d+)?)"


Dzięki temu fragment ",00" będzie opcjonalny :)

Edit: dodałem brakującą gwiazdkę w objaśnieniuTomasz Walotek edytował(a) ten post dnia 22.12.11 o godzinie 13:45

konto usunięte

Temat: python reg ex wartość pomiedzy dwoma znakami

Czepiam się:
"(\d[\d\s]*(?:,\d+)?)"

Detal taki. Zamiast gwiazdki dałbym plusa.
Łyknie ,15 - pytanie, czy tak być powinno, czy nie :)

konto usunięte

Temat: python reg ex wartość pomiedzy dwoma znakami

Dlatego przed [\d\s]* jest samo \d żeby łyknął co najmniej jedną cyfrę. Niesłusznie się Pan czepiasz ;) Zrobiłem w ten sposób (zamiast po prostu [\d\s]+) w celu ominięcia początkowych spacji - wyjaśniłem to z resztą w nawiasie :)

konto usunięte

Temat: python reg ex wartość pomiedzy dwoma znakami

Tomasz Walotek:
Dlatego przed [\d\s]* jest samo \d żeby łyknął co najmniej jedną cyfrę. Niesłusznie się Pan czepiasz ;) Zrobiłem w ten sposób (zamiast po prostu [\d\s]+) w celu ominięcia początkowych spacji - wyjaśniłem to z resztą w nawiasie :)

Zgadza się... mój błąd. :)

Następna dyskusja:

Python + GUI




Wyślij zaproszenie do