Python: wycięcie z napisu tekstu w cudzysłowiu

8-maj-2018

Załóżmy, że masz taki tekst:

message = 'Document "cv.doc" was printed on printer: XEROX'

z tego napisu chcesz wyciąć  tylko nazwę dokumentu cv.doc. Można by to zrobić posługując się zwykłymi poleceniami pracującymi na napisach, ale nie jest to zbyt wygodne rozwiązanie – trzeba się sporo przy tym napracować, a na dodatek kod będzie nieczytelny, trudny do poprawy i niewydajny.

Za to z pomocą mogą przyjść wyrażenia regularne, np

\"(.*)\"
  • Kropka to dowolny znak
  • * oznacza dowolną ilość wystąpień tego znaku
  • Nawiasy służą do grupowania
  • \” – oznacza dopasoanie/wyszukiwaniecudzysłowiów

Żeby skorzystać z wyrażeń regularnych zaimportuj moduł re a potem funką findall wyszukaj wystąpień podnapisów zawartych w tekście

import re
matches = re.findall(r'\"(.*)\"',message)
for m in matches:
     print(m)

 

 

Komentarze:

  1. Dominik napisał,

    A czy można zastąpić * określona liczba? Ze chce, żeby tylko ileś określonych tych znaków wyświetliło?

Autor: Rafał Kraik