Python使用re.sub和dict替换配额和撇号
我正试图在一次刺痛中替换“和”。这是格言:Python使用re.sub和dict替换配额和撇号,python,Python,我正试图在一次刺痛中替换“和”。这是格言: char_replace_list = { '"': '"', "'": ''', '&': '&', '<': '<', '>': '>', } 我哪里做错了?有趣的是,我得到了一个不同的结果,在我的机器上根本没有替换 您的问题是,这些标点符号的边缘不被视为单词边界(以平台相关的方式!?): \b 匹配空字符串,但
char_replace_list = {
'"': '"',
"'": ''',
'&': '&',
'<': '<',
'>': '>',
}
我哪里做错了?有趣的是,我得到了一个不同的结果,在我的机器上根本没有替换 您的问题是,这些标点符号的边缘不被视为单词边界(以平台相关的方式!?):
\b
匹配空字符串,但仅在单词的开头或结尾。单词定义为字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字、非下划线字符表示。请注意,\b
正式定义为\w
之间的边界和\W
字符(反之亦然),或介于\w
和字符串的开头/结尾之间,因此被视为字母数字的精确字符集取决于UNICODE
和LOCALE
标志的值。例如,r'\bfoo\b'
匹配'foo'
,'foo.
,,,(foo)“
,'bar foo baz'
,但不是'foobar'
或'foo3'
。在字符范围内,\b
表示退格字符,以便与Python的字符串文字兼容
您可以使用(?在这种情况下,您可以使用方法:
char\u replace\u list={
'"': '"',
“'”:“&apos;”,
“&”:“&;”,
'':''>',
}
s=“\”&<>”
#从映射转换表
t=“”.maketrans(字符替换列表)
印刷品(s.t)
#&apos;“&;<>
s = '\' " & < >'
pattern = re.compile(r'\b(' + '|'.join(self.char_replace_list.keys()) + r')\b')
pattern.sub(lambda x: char_replace_list[x.group()], s)
' " & < >
char_replace_list = {
'"': '"',
"'": ''',
'&': '&',
'<': '<',
'>': '>',
}
s = '\' " & < >'
# table translate from a mapping
t = "".maketrans(char_replace_list)
print(s.translate(t))
# ' " & < >