Gå til innhold

Python2.7 regex match æøå (google kan ikke hjelpe)


Anbefalte innlegg

Hei,

 

Teksthåndteringen i python er helt grusom. Hvorfor får jeg ingen match her:

# -*- coding: utf-8 -*-
#coding: utf-8
import urllib2
import re


aa = []
aa.append(re.compile(".*å.*"))
aa.append(re.compile(u".*å.*", re.UNICODE))
aa.append(re.compile(".*å.*", re.UNICODE))
aa.append(re.compile(unicode(".*å.*", "utf-8"), re.UNICODE))
aa.append(re.compile(unicode(".*å.*", "utf-8")))


response = urllib2.urlopen("http://www.ulv.no")
html = response.read()


for i in range(0,len(aa)):
    if aa[i].match(html):
        print i, "html"


html = 


<html>
<head>
<title>www.ulv.no</title>
</head>
<body bgcolor=#FFFFFF>
<center>
<br>
<br>
<font face="Arial,Helvetica">
<font size=+1><b>www.ulv.no</b></font>
<br>
<br>
<img src="ulv.jpg" width=200 height=303 alt="Foto: Tom Schandy"><br>
Ulver er ålreite dyr.<br>Ulven spiser bl.a. <a href="http://www.sau.no/">sau</a> og <a href="http://www.elg.no/">elg</a>.
<br>
<br>
<br>
<br>
<font size=0>Domenet er registrert gjennom <a href="http://www.domeneshop.no/">domeneshop.no</a>.</font>
</font>
</center>
</body>
</html>

(Ja jeg bruker regex til å parse html. Skyt meg)

Lenke til kommentar
Videoannonse
Annonse

Du har sikkert hørt sitatet:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

 

Tegnkoden i html-strengen må sikkert være den samme som tegnkoden i kildekoden. Sjekk om de er det samme:

print ord("å")
print ord(html[num]) // der num er indexen til bokstaven å.
Lenke til kommentar

 

Du har sikkert hørt sitatet:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

 

Tegnkoden i html-strengen må sikkert være den samme som tegnkoden i kildekoden. Sjekk om de er det samme:

print ord("å")
print ord(html[num]) // der num er indexen til bokstaven å.
print ord("å")
TypeError: ord() expected a character, but string of length 2 found

print ord(html[247]) 

gir:

229
Lenke til kommentar
(Ja jeg bruker regex til å parse html. Skyt meg)

 

Ja hvorfor det det?

Dette hadde vel vært kort tid og løse i Beautiful Soup eller lxml.

Disse behandler også Unicode også korrekt.

 

For original re modle in standar libary så behandler denne ikke Unicode korrekt.

Bruke regex module som kan behandle Unicode,forkarerer litt om det i siste post her.

Endret av snippsat
Lenke til kommentar

Beklager, jeg leste ikke feilmeldingen din skikkelig. Men den forteller deg jo hva problemet er (som var det vi ønsket): "å" (som streng i kildekoden) bruker tegnesett utf-8 (og bruker 2 bytes). www.ulv.no bruker tegnsett windows-1252 e.l. der å er kodet som en byte med verdien 229.

>>> ord('å'[0])
195
>>> ord('å'[1])
165
>>>
Lenke til kommentar
Hvordan gjør jeg html til en utf-8 Unicode streng? 

Beautiful Soup gjøre dette for deg automatisk.

Du leser med Inn med Request og sender til Beautiful Soup.

Eks.

import requests
from bs4 import BeautifulSoup

url = 'http://CNN.com'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
tag = soup.find('title')
print(tag.text) #--> Breaking News, U.S., World, Weather, Entertainment & Video News - CNN.com
Endret av snippsat
  • Liker 1
Lenke til kommentar

Her er en som funker:

 # -*- coding: utf-8 -*-
import urllib2
import re


aa = []
aa.append(re.compile(u".*å.*"))
aa.append(re.compile(u".*å.*".encode('iso-8859-1')))

response = urllib2.urlopen("http://www.ulv.no")
html = response.read()

for i in range(0,len(aa)):
    if aa[i].search(html): # search istedenfor match
        print i, "html"
Legg merke til at jeg byttet ut match med search. Hvis du vil bruke match må du bruke flagget re.S.

 

 

Hvordan gjør jeg html til en utf-8 Unicode streng?

html = html.decode('iso-8859-1')

 

Dette gjør den om til en python unicode-string, som ikke er det samme som utf-8. Hvis du vil ha den som en utf-8 byte-string så encoder du bare unicode-stringen til utf-8.

Endret av FraXinuS
  • Liker 2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...