Python取代正则表达式

时间:2016-05-06 10:14:38

标签: python regex

我有一个字符串,其中有一些属性可能为空:

[attribute1=value1, attribute2=, attribute3=value3, attribute4=]

使用python我需要使用值'None'来清空空值。我知道我可以使用string.replace('=,','=None,').replace('=]','=None]')作为字符串,但我想知道是否有办法使用正则表达式,可能使用?P<name>选项。

4 个答案:

答案 0 :(得分:0)

您可以使用

import re

s = '[attribute1=value1, attribute2=, attribute3=value3, attribute4=]'
re.sub(r'=(,|])', r'=None\1', s)

\1是括号中的匹配项。

答案 1 :(得分:0)

使用python的re模块,您可以执行以下操作:

# import it first
import re

# your code 
re.sub(r'=([,\]])', '=None\1', your_string)

答案 2 :(得分:0)

您可以使用

s = '[attribute1=value1, attribute2=, attribute3=value3, attribute4=]'
re.sub(r'=(?!\w)', r'=None', s)

这是有效的,因为否定前瞻 (?!\w)会检查=字符不是后跟'word'字符。正则表达式中“单词字符”的定义通常类似于“a到z,0到9,加上下划线”(不区分大小写)。

根据您的示例数据,似乎所有属性值都与此匹配。如果值可能以逗号(不太可能),可能被引用或可能以其他任何东西开头,它将无法工作。如果是这样,您需要更加简单的设置,例如从开始解析:通过找到第一个=字符来跳过属性 name

答案 3 :(得分:0)

具体并使用字符类:

import re

string = "[attribute1=value1, attribute2=, attribute3=value3, attribute4=]"
rx = r'\w+=(?=[,\]])'
string = re.sub(rx, '\g<0>None', string)
print string
# [attribute1=value1, attribute2=None, attribute3=value3, attribute4=None]