返回
Python 全角半角互换的实用逻辑
后端
2023-11-25 13:04:20
正文
在实际的编程场景中,我们经常会遇到全角和半角字符交织的情况。例如,用户在输入表单时,可能会输入全角空格而不是半角空格。此时,我们需要对字符串进行全角与半角互换,以保证数据的统一性。
Python 语言提供了丰富的字符串处理库,我们可以轻松地实现全角与半角的互换。
1. 使用 str.translate() 方法
str.translate() 方法可以将字符串中的字符映射到另一个字符。我们可以使用它来实现全角与半角的互换。
def fullwidth_to_halfwidth(text):
"""将字符串中的全角字符转换为半角字符。"""
table = str.maketrans(",。!?;:“‘”【】(){}·", ",.!?;:\"'[](){}·")
return text.translate(table)
def halfwidth_to_fullwidth(text):
"""将字符串中的半角字符转换为全角字符。"""
table = str.maketrans(",.!?;:\"'[](){}·", ",。!?;:“‘”【】(){}·")
return text.translate(table)
2. 使用正则表达式
正则表达式是一种强大的字符串处理工具。我们可以使用它来匹配全角和半角字符,并进行替换。
import re
def fullwidth_to_halfwidth(text):
"""将字符串中的全角字符转换为半角字符。"""
pattern = re.compile("[^\x20-\x7e]")
return pattern.sub(lambda m: chr(ord(m.group(0)) - 0xFEE0), text)
def halfwidth_to_fullwidth(text):
"""将字符串中的半角字符转换为全角字符。"""
pattern = re.compile("[ -~]")
return pattern.sub(lambda m: chr(ord(m.group(0)) + 0xFEE0), text)
3. 使用第三方库
如果我们不想自己编写代码,也可以使用第三方库来实现全角与半角的互换。例如,unicodedata
库提供了 normalize()
方法,可以将字符串转换为全角或半角。
import unicodedata
def fullwidth_to_halfwidth(text):
"""将字符串中的全角字符转换为半角字符。"""
return unicodedata.normalize('NFKC', text)
def halfwidth_to_fullwidth(text):
"""将字符串中的半角字符转换为全角字符。"""
return unicodedata.normalize('NFKC', text)
4. 使用自定义转换表
我们可以创建一个自定义的转换表,将全角字符映射到半角字符,反之亦然。然后,我们可以使用这个转换表来实现全角与半角的互换。
fullwidth_to_halfwidth_table = {
",": ",",
"。": ".",
"!?": "!?",
";": ";",
":“": ":",
"‘”": "\'",
"【】": "[]",
"()": "()",
"{}": "{}",
"·": "·"
}
halfwidth_to_fullwidth_table = {v: k for k, v in fullwidth_to_halfwidth_table.items()}
def fullwidth_to_halfwidth(text):
"""将字符串中的全角字符转换为半角字符。"""
return "".join([fullwidth_to_halfwidth_table.get(c, c) for c in text])
def halfwidth_to_fullwidth(text):
"""将字符串中的半角字符转换为全角字符。"""
return "".join([halfwidth_to_fullwidth_table.get(c, c) for c in text])
5. 使用在线转换工具
如果我们不想自己编写代码,也可以使用在线转换工具来实现全角与半角的互换。例如,全角半角转换器就是一个非常方便的工具。
总结
本文介绍了五种在 Python 中实现全角与半角互换的实用逻辑。这些逻辑都非常简单易用,我们可以根据自己的需求选择一种来使用。