Я знаю, что немного опоздал, но вот альтернатива подходу \G
:
import re
def replace(match):
if match.group(0)[0] == '/': return match.group(0)
else: return '<' + match.group(0) + '>'
source = '''http://a.com http://b.com
//http://etc.'''
pattern = re.compile(r'(?m)^//.*$|http://\S+')
result = re.sub(pattern, replace, source)
print(result)
вывод (через Ideone ):
<http://a.com> <http://b.com>
//http://etc.
Идея состоит в том, чтобы использовать регулярное выражение, соответствующее обоим видам строк: URL или закомментированная строка. Затем вы используете обратный вызов (делегат, замыкание, встроенный код и т. Д.), Чтобы выяснить, какой из них соответствует, и вернуть соответствующую строку замены.
На самом деле, это мой предпочтительный подход даже в тех вариантах, которые поддерживают \G
. Даже в Java, где я должен написать кучу стандартного кода для реализации обратного вызова.
(Я не парень из Python, поэтому прости меня, если код ужасно непитоничен.)