我希望在python中匹配key
或key=val
,以便groupdict()
对象中生成的Match
将val
作为None
或者有一个值。
以下是关闭:
>>> regex = re.compile('(?P<key>[^=]+)=?(?P<val>.*)')
>>> regex.match('x=y').groupdict()
{'key': 'x', 'val': 'y'} # yes!
>>> regex.match('x').groupdict()
{'key': 'x', 'val': ''} # want None, not ''
但我希望val
在第二种情况下为None
。我尝试将可选=
移到第二组:
>>> regex = re.compile('(?P<key>[^=]+)(?P<val>=.+)?')
>>> regex.match('x').groupdict()
{'key': 'x', 'val': None} # yes!
>>> regex.match('x=y').groupdict()
{'key': 'x', 'val': '=y'} # don't want the =
这会给我None
,但会将=
附加到val
。我也尝试使用(?<==)
的lookbehind,但这对两个表达式都不起作用。有没有办法实现这个目标?
答案 0 :(得分:3)
向String.utf16
部分添加可选的量词?
,使其匹配为零或一次
value
所做的更改
将>> regex = re.compile('(?P<key>[^=]+)(?:=(?P<val>.+))?')
>>> regex.match('x=y').groupdict()
{'key': 'x', 'val': 'y'}
>>> regex.match('x').groupdict()
{'key': 'x', 'val': None}
移至非捕获群组=
(?:..)
匹配零次或一次。这由(?:=(?P<val>.+))?
确保。也就是它检查?
是否可以匹配(仅捕获值部分)。如果没有捕获=value
。
答案 1 :(得分:0)
试试这个:
regex = re.compile('(?P<key>[^=]+)(?:=(?P<val>.*))?')
编辑正则表达式
测试1:'x = y',然后key ='x'和val ='y'
测试2:'x =',然后key ='x'和val =''
测试3:'x',然后key ='x',val =无