Key =使用正则表达式进行Val匹配

时间:2015-07-07 15:05:26

标签: python regex

我希望在python中匹配keykey=val,以便groupdict()对象中生成的Matchval作为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,但这对两个表达式都不起作用。有没有办法实现这个目标?

2 个答案:

答案 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 =无