Я заранее прошу прощения, если заголовок этого вопроса не является достаточно точным, я старался изо всех сил, чтобы проиллюстрировать это примером и коротким объяснением ниже:
Я пытаюсь написать регулярное выражение, которое может идентифицироватьвыражение в любой из следующих форм:
name=value
name!=value
name
!name
!name=value
!name!=value
Я разработал следующее регулярное выражение, которое работает довольно хорошо, за исключением случаев, когда первый операнд (имя) начинается с '!'.
import re
expressionRe = re.compile( r"^(?P<name>[^=|^\!=]+)(?P<operator>(\!=|=*))(?P<value>.*)$" )
def showGroups( expr ):
exprMatch = expressionRe.match( expr )
if not exprMatch:
print "no match"
else:
print "Name: {0}, operator: {1}, value {2}".\
format( exprMatch.group('name'),
exprMatch.group('operator'),
exprMatch.group('value') )
showGroups('abc!=')
Name: abc, operator: !=, value:
showGroups('.*=')
Name: .*, operator: =, value:
showGroups('.*=abc')
Name: .*, operator: =, value: abc
showGroups('.*=val')
Name: .*, operator: =, value: val
showGroups('=') // this is expected
no match
showGroups('!abc') // this doesn't work :(
no match
Я понимаю, что первая группа захвата не позволила первому операнду (имени) начинаться с '!', Но это самый близкий рабочий пример, который я могу продемонстрировать всем остальнымдела работают правильно.
Интересно, может ли кто-нибудь помочь мне с последней частью, получить имя, чтобы можно было начинать с '!', Без прерывания группы операторов может начинаться с '!'если за ним следует знак «=».
Заранее благодарим вас за любые советы или предложения.