php preg_replace 在 python
php preg_replace in python
我有一个 php 函数可以清除任何特殊字符,现在我想在 Python.
中创建一个类似 php 的函数
我的php函数:
function cleanString($text)
{
$utf8 = array(
'/[áàâãªä]/u' => 'a',
'/[ÁÀÂÃÄ]/u' => 'A',
'/[ÍÌÎÏ]/u' => 'I',
'/[íìîï]/u' => 'i',
'/[éèêë]/u' => 'e',
'/[ÉÈÊË]/u' => 'E',
'/[óòôõºö]/u' => 'o',
'/[ÓÒÔÕÖ]/u' => 'O',
'/[úùûü]/u' => 'u',
'/[ÚÙÛÜ]/u' => 'U',
'/ç/' => 'c',
'/Ç/' => 'C',
'/ñ/' => 'n',
'/Ñ/' => 'N',
'/–/' => '-', // UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' => ' ', // Literally a single quote
'/[“”«»„]/u' => ' ', // Double quote
'/ /' => ' ', // nonbreaking space (equiv. to 0x160)
);
return preg_replace(array_keys($utf8), array_values($utf8), trim($text));
}
我在 Python 中试过如下:
def clean(text):
utf8 = {
'/[áàâãªä]/u' : 'a',
'/[ÁÀÂÃÄ]/u' : 'A',
'/[ÍÌÎÏ]/u' : 'I',
'/[íìîï]/u' : 'i',
'/[éèêë]/u' : 'e',
'/[ÉÈÊË]/u' : 'E',
'/[óòôõºö]/u' : 'o',
'/[ÓÒÔÕÖ]/u' : 'O',
'/[úùûü]/u' : 'u',
'/[ÚÙÛÜ]/u' : 'U',
'/ç/' : 'c',
'/Ç/' : 'C',
'/ñ/' : 'n',
'/Ñ/' : 'N',
'/–/' : '-', # UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' : ' ', # Literally a single quote
'/[“”«»„]/u' : ' ', # Double quote
'/ /' : ' ', # nonbreaking space (equiv. to 0x160)
}
return re.sub(utf8.keys(), utf8.values(), text.strip())
但显示错误消息如下:
unhashable type: 'dict_keys'
Python 的 re.sub
doesn't support array-style inputs the way PHP's preg_replace
是。您需要迭代替换,例如
def clean(text):
utf8 = {
'[áàâãªä]' : 'a',
'[ÁÀÂÃÄ]' : 'A',
'[ÍÌÎÏ]' : 'I',
'[íìîï]' : 'i',
'[éèêë]' : 'e',
'[ÉÈÊË]' : 'E',
'[óòôõºö]' : 'o',
'[ÓÒÔÕÖ]' : 'O',
'[úùûü]' : 'u',
'[ÚÙÛÜ]' : 'U',
'ç' : 'c',
'Ç' : 'C',
'ñ' : 'n',
'Ñ' : 'N',
'–' : '-', # UTF-8 hyphen to "normal" hyphen
'[’‘‹›‚]' : ' ', # Literally a single quote
'[“”«»„]' : ' ', # Double quote
' ' : ' ', # nonbreaking space (equiv. to 0x160)
}
text = text.strip()
for pat, repl in utf8.items():
text = re.sub(pat, repl, text, 0, re.U)
return text
另请注意,python 不在正则表达式周围使用定界符,您将 u
标志直接传递给 re.sub
。我已经调整了您的代码来处理这些问题。
示例用法:
print(clean('ÂôÑ‹Î'))
输出:
AoN I
我有一个 php 函数可以清除任何特殊字符,现在我想在 Python.
中创建一个类似 php 的函数我的php函数:
function cleanString($text)
{
$utf8 = array(
'/[áàâãªä]/u' => 'a',
'/[ÁÀÂÃÄ]/u' => 'A',
'/[ÍÌÎÏ]/u' => 'I',
'/[íìîï]/u' => 'i',
'/[éèêë]/u' => 'e',
'/[ÉÈÊË]/u' => 'E',
'/[óòôõºö]/u' => 'o',
'/[ÓÒÔÕÖ]/u' => 'O',
'/[úùûü]/u' => 'u',
'/[ÚÙÛÜ]/u' => 'U',
'/ç/' => 'c',
'/Ç/' => 'C',
'/ñ/' => 'n',
'/Ñ/' => 'N',
'/–/' => '-', // UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' => ' ', // Literally a single quote
'/[“”«»„]/u' => ' ', // Double quote
'/ /' => ' ', // nonbreaking space (equiv. to 0x160)
);
return preg_replace(array_keys($utf8), array_values($utf8), trim($text));
}
我在 Python 中试过如下:
def clean(text):
utf8 = {
'/[áàâãªä]/u' : 'a',
'/[ÁÀÂÃÄ]/u' : 'A',
'/[ÍÌÎÏ]/u' : 'I',
'/[íìîï]/u' : 'i',
'/[éèêë]/u' : 'e',
'/[ÉÈÊË]/u' : 'E',
'/[óòôõºö]/u' : 'o',
'/[ÓÒÔÕÖ]/u' : 'O',
'/[úùûü]/u' : 'u',
'/[ÚÙÛÜ]/u' : 'U',
'/ç/' : 'c',
'/Ç/' : 'C',
'/ñ/' : 'n',
'/Ñ/' : 'N',
'/–/' : '-', # UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' : ' ', # Literally a single quote
'/[“”«»„]/u' : ' ', # Double quote
'/ /' : ' ', # nonbreaking space (equiv. to 0x160)
}
return re.sub(utf8.keys(), utf8.values(), text.strip())
但显示错误消息如下:
unhashable type: 'dict_keys'
Python 的 re.sub
doesn't support array-style inputs the way PHP's preg_replace
是。您需要迭代替换,例如
def clean(text):
utf8 = {
'[áàâãªä]' : 'a',
'[ÁÀÂÃÄ]' : 'A',
'[ÍÌÎÏ]' : 'I',
'[íìîï]' : 'i',
'[éèêë]' : 'e',
'[ÉÈÊË]' : 'E',
'[óòôõºö]' : 'o',
'[ÓÒÔÕÖ]' : 'O',
'[úùûü]' : 'u',
'[ÚÙÛÜ]' : 'U',
'ç' : 'c',
'Ç' : 'C',
'ñ' : 'n',
'Ñ' : 'N',
'–' : '-', # UTF-8 hyphen to "normal" hyphen
'[’‘‹›‚]' : ' ', # Literally a single quote
'[“”«»„]' : ' ', # Double quote
' ' : ' ', # nonbreaking space (equiv. to 0x160)
}
text = text.strip()
for pat, repl in utf8.items():
text = re.sub(pat, repl, text, 0, re.U)
return text
另请注意,python 不在正则表达式周围使用定界符,您将 u
标志直接传递给 re.sub
。我已经调整了您的代码来处理这些问题。
示例用法:
print(clean('ÂôÑ‹Î'))
输出:
AoN I