Режимы Python поддерживают что-то вроде Perl \ G?

У меня есть регулярное выражение Perl (показано здесь , хотя понимание всего этого, надеюсь, не обязательно для ответа на этот вопрос), который содержит метасимвол \ G. Я бы хотел перевести его на Python, но Python, похоже, не поддерживает \ G. Что я могу сделать?

5 Solutions collect form web for “Режимы Python поддерживают что-то вроде Perl \ G?”

Попробуйте эти:

import re re.sub() re.findall() re.finditer() 

например:

 # Finds all words of length 3 or 4 s = "the quick brown fox jumped over the lazy dogs." print re.findall(r'\b\w{3,4}\b', s) # prints ['the','fox','over','the','lazy','dogs'] 

Вы можете использовать re.match для соответствия привязанным шаблонам. re.match будет соответствовать только в начале (позиция 0) текста или указать его.

 def match_sequence(pattern,text,pos=0): pat = re.compile(pattern) match = pat.match(text,pos) while match: yield match if match.end() == pos: break # infinite loop otherwise pos = match.end() match = pat.match(text,pos) 

Это будет соответствовать только шаблону из данной позиции и любым совпадениям, следующим за 0 символами.

 >>> for match in match_sequence(r'[^\W\d]+|\d+',"he11o world!"): ... print match.group() ... he 11 o 

Я знаю, что я немного опаздываю, но вот альтернатива подходу \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) и 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, так что простите меня, если код ужасно не-pythonic.)

Python не имеет модификатора / g для своего regexen и поэтому не имеет токена \ G regex. Очень жаль.

Не пытайтесь вкладывать все в одно выражение, так как становится очень трудно читать, переводить (как вы сами видите) и поддерживать.

 import re lines = [re.sub(r'http://[^\s]+', r'<\g<0>>', line) for line in text_block.splitlines() if not line.startedwith('//')] print '\n'.join(lines) 

Python обычно не лучший, когда вы буквально переводите с Perl, у него есть собственные шаблоны программирования.

  • Библиотека, чтобы проверить, равны / изоморфны два регулярных выражения
  • Исходная строка и регулярное выражение в Python
  • Более быстрый способ удаления стоп-слов в Python
  • Как читать файл и извлекать данные между многострочными шаблонами?
  • Эквивалентен методу findall () Python в Ruby?
  • Как я могу гарантировать, что мое регулярное выражение Python выводит словарь?
  • регулярное выражение lelymatch ply имеет разные группы, чем обычный re
  • Комментарий к парному C-Style с регулярным выражением, избегайте Backtracking
  •  
    Interesting Posts for Van-Lav

    Может ли пользовательские команды Django manage.py вернуть значение? Как, а почему нет?

    Способы вызова python и Spyder на OSX

    Как установить предопределенное значение формы из ссылки в Django?

    Форматирование даты и времени в строку с миллисекундами

    как получить уникальные значения из списка повторяющихся значений

    Как сравнить все элементы в списке с целым числом без использования для цикла

    Чтение и отображение изображений тензора

    Невозможно импортировать имя simplejson – После установки simplejson

    Открыть файл в __init __ () python

    pip при установке Python: «Игнорирование ошибки failpip: для протокола 8.1.1 требуется SSL / TLS»

    У меня возникают проблемы с wtforms selectfields, когда я использую POST с Flask

    Как я могу заставить декоратор Python работать после завершения декорированной функции?

    Pygame (Python) – TypeError: Аргумент должен быть прямым объектом стиля

    Многопроцессорность или многопоточность?

    Понимание django.shortcuts.redirect

    Python - лучший язык программирования в мире.