8 de outubro de 2009

Regexp para validar passagem bíblica

Há alguns dias venho me dedicando na migração de um site de conteúdo bíblico para Django.

Uma coisa básica quando trata-se de Bíblia, é lidar com passagens bíblicas. Cada passagem pode envolver um ou mais versos (versículos) ou capítulos em sequência ou não.

Seguem alguns exemplos de passagens bíblicas válidas:
  • Genesis 5
  • Exodo 20:8-11
  • Mateus 6:5,6
  • Marcos 5-7
  • II Reis 2:6
As passagens podem misturar as sequências dentro de determinadas regras.

Daí eu resolvi fazer uma primeira validação da estrutura das passagens bíblicas usando expressões regulares.

O código que fiz é esse aqui:
import re
def is_valid_passage(p):
    '''
    Check basic passage structure.

    File ./business-test.txt has doctests.
    '''
    book = r'(([1-3]|[iI]{1,3})( )?)?[a-zã-ũá-úà-ùâ-ûä-üçA-ZÃ-ŨÁ-ÚÀ-ÙÂ-ÛÄ-ÜÇ]+'
    passage = r'({book}( {number})?((:|-|,){number})*)'.format(
        book = book,
        number = r'\d{1,3}')
    regexp = r'{passage}((, ){passage})*$'.format(passage = passage)
    if re.match(regexp, p):
        return True
    else:
        return False


Os testes estão em http://pastie.org/647220

Será que tem um jeito melhor de validar a estrutura das passagens bíblicas?

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

Nenhum comentário:

Postar um comentário

Marcadores