正则表达式不是没有

时间:2017-08-29 02:25:40

标签: python regex

当正则表达式不匹配时,如何返回'value'而不是None。 例如,我想要第二个re.findall返回一个列表:[('a','b','value','d')]这样我就可以对两个字符串进行比较。在这里,如果可能,'value'最好是'False'。

import re
match = re.findall (r'(a)(b)(c)(d)','abcd')
print (match)
match = re.findall(r'(a)(b)(c)(d)','abd')
print (match)

输出[1]:

  

[('a','b','c','d')]

输出[2]:

  

[]

2 个答案:

答案 0 :(得分:0)

你可以做到:

match = re.findall(r'(a?)(b?)(c?)(d?)','abd')

请注意,这会返回:

In [5]: re.findall(r'(a?)(b?)(c?)(d?)', 'abd')
Out[5]: [('a', 'b', '', 'd'), ('', '', '', '')]

也就是说,它都会为'c'(您所需的条件)返回一个空白,并为所有匹配四个缺失字符的空白返回。

答案 1 :(得分:0)

在python中观察到一个空列表[]后,评估为False,这似乎接近你想要的:

>>> [re.findall(c,'abd') for c in 'abcd']
[['a'], ['b'], [], ['d']]

或者,如果您正在寻找匹配而不是匹配的字符:

>>> [c if re.findall(c, 'abd') else False for c in 'abcd' ]
['a', 'b', False, 'd']

如果您想要匹配列表并希望False代替[],那么:

>>> [x if x else False for x in (re.findall(c,'abd') for c in 'abcd')]
[['a'], ['b'], False, ['d']]