2015-04-05 7 views
11

Mam błąd podczas próby użycia zawierać w python.ekwiwalent ciągu znaków Unicode zawiera

s = u"some utf8 words" 
k = u"one utf8 word" 

if s.contains(k): 
    print "contains" 

Jak osiągnąć ten sam wynik?

Przykład z normalnym ASCII ciąg

s = "haha i am going home" 
k = "haha" 

if s.contains(k): 
    print "contains" 

Używam Pythona 2.7.x

+0

co jest błąd? – rmuc8

+0

'u '...'' obiektami są ** nie ** * słowa UTF-8 *. Są to obiekty Unicode, a UTF-8 to * zakodowane dane reprezentujące wartości Unicode *. Jest to porównywalne do wyświetlania obrazu na ekranie i kodowania go do pliku PNG lub JPEG, lub obiektu 'datetime' i kodowania takich obiektów do ciągu ISO-8601. Zakodowane dane i wartość są ze sobą powiązane, ale nie to samo. –

Odpowiedz

16

To samo dla ASCII i utf8 strun:

if k in s: 
    print "contains" 

Nie ma na ASCII lub uft8 ciągi:

>>> "strrtinggg".contains 
AttributeError: 'str' object has no attribute 'contains' 

Co można użyć zamiast contains jest find lub index:

if k.find(s) > -1: 
    print "contains" 

lub

try: 
    k.index(s) 
except ValueError: 
    pass # ValueError: substring not found 
else: 
    print "contains" 

Ale oczywiście, operator in jest droga, to o wiele bardziej elegancki.

6

Nie ma różnicy między str i unicode.

print u"ábc" in u"some ábc" 
print "abc" in "some abc" 

jest w zasadzie taki sam.

4

Ciągi nie mają atrybutu "zawierać".

s = "haha i am going home" 
s_new = s.split(' ') 
k = "haha" 

if k in s_new: 
    print "contains" 

Chyba chcesz osiągnąć ten