#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 :|$)')
Значение
- Сопоставьте один или несколько символов слова с двоеточием
- Лениво сопоставляйте все, что не является двоеточием
- Найдите один или несколько символов слова и двоеточие или конец строки
Ответ №2:
Захват любого символа, кроме :
, не был бы полезен, поскольку он включал бы новые строки и address
. Похоже, что ваше фактическое требование таково: сопоставьте весь текст вплоть до начала следующей строки, содержащей двоеточие. Вот один из подходов:
re.split("n (?=.*:)", s.strip())
Шаблон означает «группу новых строк, за которыми следует любой текст, содержащий двоеточие». Входные данные удалены, так что окончательная новая строка в конце не будет включена в конечный элемент результата.
Комментарии:
1. Я удалил свой комментарий, потратил несколько минут, пытаясь добавить myaddress3 самостоятельно, понял, что он не существует!