返回

Python 全角半角互换的实用逻辑

后端

正文

在实际的编程场景中,我们经常会遇到全角和半角字符交织的情况。例如,用户在输入表单时,可能会输入全角空格而不是半角空格。此时,我们需要对字符串进行全角与半角互换,以保证数据的统一性。

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 中实现全角与半角互换的实用逻辑。这些逻辑都非常简单易用,我们可以根据自己的需求选择一种来使用。