регулярное выражение для распознавания ‘x:…y:…z :…’ в python

#python #regex

#python #регулярное выражение

Вопрос:

Существует строка с содержимым в формате «x:…y:…z :…», ‘…’ обозначает любой символ, исключающий ‘:’, и может содержать любое количество пробелов, я пытаюсь разделить такую строку на [‘x:…’, ‘y:…’, ‘z: …’], как я могу это сделать на python?

пример строки:

 'name: mynamennaddress: myaddress1nmyaddress2nnmyadress3ncontact:mycontactn'
  

то, что я хочу получить, это:

 ['name: mynamenn', 'address: myaddress1,nmyadress2,nnmyadress3n', 'contact:mycontactn']
  

Комментарии:

1. Откуда myadress3 берется?

2. извините, я исправил это.

Ответ №1:

re.compile('w :[^:]*?(?=w :|$)')

Значение

  1. Сопоставьте один или несколько символов слова с двоеточием
  2. Лениво сопоставляйте все, что не является двоеточием
  3. Найдите один или несколько символов слова и двоеточие или конец строки

ДЕМОНСТРАЦИЯ

Ответ №2:

Захват любого символа, кроме : , не был бы полезен, поскольку он включал бы новые строки и address . Похоже, что ваше фактическое требование таково: сопоставьте весь текст вплоть до начала следующей строки, содержащей двоеточие. Вот один из подходов:

 re.split("n (?=.*:)", s.strip())
  

Шаблон означает «группу новых строк, за которыми следует любой текст, содержащий двоеточие». Входные данные удалены, так что окончательная новая строка в конце не будет включена в конечный элемент результата.

Комментарии:

1. Я удалил свой комментарий, потратил несколько минут, пытаясь добавить myaddress3 самостоятельно, понял, что он не существует!