Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用re.sub和dict替换配额和撇号_Python - Fatal编程技术网

Python使用re.sub和dict替换配额和撇号

Python使用re.sub和dict替换配额和撇号,python,Python,我正试图在一次刺痛中替换“和”。这是格言: char_replace_list = { '"': '&quot;', "'": '&apos;', '&': '&amp;', '<': '&lt', '>': '&gt', } 我哪里做错了?有趣的是,我得到了一个不同的结果,在我的机器上根本没有替换 您的问题是,这些标点符号的边缘不被视为单词边界(以平台相关的方式!?): \b 匹配空字符串,但

我正试图在一次刺痛中替换“和”。这是格言:

char_replace_list = {
    '"': '&quot;',
    "'": '&apos;',
    '&': '&amp;',
    '<': '&lt',
    '>': '&gt',
}

我哪里做错了?

有趣的是,我得到了一个不同的结果,在我的机器上根本没有替换

您的问题是,这些标点符号的边缘不被视为单词边界(以平台相关的方式!?):

\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)
' " &amp; &lt; &gt;
char_replace_list = {
    '"': '&quot;',
    "'": '&apos;',
    '&': '&amp;',
    '<': '&lt',
    '>': '&gt',
}
s = '\' " & < >'
# table translate from a mapping
t = "".maketrans(char_replace_list)
print(s.translate(t))
# &apos; &quot; &amp; &lt &gt