2016-09-05 5 views
1

У меня есть две строки:регулярное выражение жадного матч заканчивается символом или конца строки

1) «Дата создания test1 Правило Счет Владелец Sharing»

2) «Обновленный Счет Владелец Sharing Правило test3: Изменено CaseAccessLevel из прочитанного/запись только для чтения»

в результате сопоставления регулярных выражений, я хочу видеть:

1) Создан аккаунт Владелец Sharing Правило test1

2) Обновление счета Владелец Sharing Правило test3

разделены на 4 группы:

1) (создания) (счета) (Владелец Sharing Rule) (test1)

2) (Обновлено) (счета) (Владелец Sharing Rule) (test3)

для этих целей я пытался использовать следующий питон регулярного выражение:

'^(?P<action>^[^\s]+)\s(?P<target_object_label>.+)\s(?P<object_type>Owner\sSharing\sRule)\s(?P<object_label>.+)(?=:|$) 

но для второй строки четвёртой группы выглядит как «test3: Изменен CaseAcces sLevel от Read/Write to Read Only '.

По существу регулярное выражение должно останавливаться либо в конце строки, либо перед символом ':', но жадное совпадение не позволяет этого сделать.

Заранее спасибо за ответы,

Dzmitry

+0

Что-то вроде этого: ** https: //regex101.com/r/sU5dD2/1**? – Jan

+1

После любого квантификатора с символом '?' Означает «минимальное совпадение», например '. +?'. – cdarke

ответ

0

Вы могли сделать:

^(?P<action>\S+)\ 
(?P<target_object_label>.+)\s 
(?P<object_type>Owner\ Sharing\ Rule)\s 
(?P<object_label>[^:\n]+)    # stop before : or newline 

См a demo on regex101.com (против различных модификаторов!).

+1

Спасибо, Ян! Это именно то, что мне нужно! – Dzmitry

+0

@Dzmitry: Рад помочь. – Jan