Próbuję zlokalizować wszystkie pozycje indeksu łańcucha na liście słów i chcę wartości zwrócone jako listy. Chciałbym znaleźć ciąg znaków, jeśli jest on samodzielny, lub jeśli jest poprzedzony lub następuje interpunkcją, ale nie jeśli jest podłańcuchem większego słowa.Jak korzystać z wyrażenia regularnego w zrozumieniu listy w Pythonie?
Poniższy kod przechwytuje tylko "krowa" i pomija zarówno "test, krowa", jak i "krowa".
myList = ['test;cow', 'one', 'two', 'three', 'cow.', 'cow', 'acow']
myString = 'cow'
indices = [i for i, x in enumerate(myList) if x == myString]
print indices
>> 5
Próbowałem zmiany kodu, aby użyć wyrażenia regularnego:
import re
myList = ['test;cow', 'one', 'two', 'three', 'cow.', 'cow', 'acow']
myString = 'cow'
indices = [i for i, x in enumerate(myList) if x == re.match('\W*myString\W*', myList)]
print indices
Ale to daje błąd: ciąg spodziewane lub bufor
Jeśli ktoś wie co robię źle I Byłbym bardzo szczęśliwy słysząc. Mam wrażenie, że ma to coś wspólnego z tym, że próbuję użyć wyrażenia regularnego tam, gdzie oczekuje się ciągu znaków. Czy istnieje rozwiązanie?
Wyjście szukam powinien brzmieć:
>> [0, 4, 5]
Dzięki
może dodać 're.escape' też? –
@MartijnPieters: jasne, dodane. – georg
To nie pasuje do pierwszego elementu, który OP chce dopasować. –