регулярное выражение: tw- слова с префиксом и необязательными кавычками

Я изо всех сил пытаюсь создать регулярное выражение, чтобы поймать слова, начинающиеся с tw (или Tw, или TW), независимо от того, находятся ли они в кавычках (одинарных или двойных) или нет. На данный момент '\b[tT][wW][a-zA-Z0-9]*' перехватывает все начальные слова tw, Tw и TW, но пропускает слова, заключенные в одинарные или двойные кавычки. Он находит и tweeple, и TWEEPLE, но не tweeple и не «TWEEPLE».

Помощь очень ценится.


person jrichalot    schedule 05.04.2012    source источник


Ответы (1)


\b в вашей строке интерпретируется как символ возврата, а не последовательность \b, которая будет интерпретироваться механизмом регулярных выражений как граница слова. Измените свою строку на необработанный строковый литерал или экранируйте обратную косую черту, и она должна Работа:

>>> re.findall(r'\b[tT][wW][a-zA-Z0-9]*', ' "TWEEPLE" tweeple ')
['TWEEPLE', 'tweeple']

Вот пример разницы:

>>> 'abc\b'
'abc\x08'
>>> print 'abc\b'
abc
>>> r'abc\b'
'abc\\b'
>>> print r'abc\b'
abc\b
person Andrew Clark    schedule 05.04.2012
comment
Хороший улов на том, что \b не является литералом. И я не знал, что это включает кавычки - хотя это имеет смысл. Удаление моего ответа. - person Dan Breen; 05.04.2012