У меня есть функция с python doctest, которая не работает, потому что одна из тестовых входных строк имеет обратную косую черту, которая обрабатывается как escape-символ, даже если я закодировал строку как необработанную строку.
Мой doctest выглядит так:
>>> infile = [ "Todo: fix me", "/** todo: fix", "* me", "*/", r"""//\todo stuff to fix""", "TODO fix me too", "toDo bug 4663" ]
>>> find_todos( infile )
['fix me', 'fix', 'stuff to fix', 'fix me too', 'bug 4663']
И функция, предназначенная для извлечения текстов задач из одной строки после некоторого изменения спецификации todo, выглядит следующим образом:
todos = list()
for line in infile:
print line
if todo_match_obj.search( line ):
todos.append( todo_match_obj.search( line ).group( 'todo' ) )
И регулярное выражение под названием todo_match_obj
имеет вид:
r"""(?:/{0,2}\**\s?todo):?\s*(?P<todo>.+)"""
Быстрый разговор с моей оболочкой ipython дает мне:
In [35]: print "//\todo"
// odo
In [36]: print r"""//\todo"""
//\todo
И, на случай, если реализация doctest использует stdout (я не проверял, извините):
In [37]: sys.stdout.write( r"""//\todo""" )
//\todo
Мой regex-foo невысок по любым меркам, и я понимаю, что мог бы что-то здесь упустить.
РЕДАКТИРОВАТЬ: После ответа Алекса Мартеллиса, я хотел бы посоветовать, какое регулярное выражение будет фактически соответствовать взорванному r"""//\todo fix me"""
. Я знаю, что изначально я не просил кого-то сделать домашнее задание, и я приму ответ Алекса, поскольку он действительно ответил на мой вопрос (или подтвердил мои опасения). Но я обещаю высказать любые хорошие решения моей проблемы здесь:)
EDITEDIT: для справки, в проекте kodos была обнаружена ошибка: ошибка # 437633
Я использую Python 2.6.4 (r264: 75706, 7 декабря 2009, 18:45:15)
Спасибо, что прочитали это далеко (если вы пропустили прямо здесь, я понимаю)