【发布时间】:2016-01-28 03:43:26
【问题描述】:
这是一个复杂的例子,但它显示了我正在尝试做的事情。假设我有一个字符串:
from string import ascii_uppercase, ascii_lowercase, digits
s = "Testing123"
我想将s 中出现在ascii_uppercase 中的所有值替换为“L”代表大写字母,所有出现在ascii_lowercase 中的值都替换为“l”代表小写字母,以及digits 中的所有值用“n”表示数字。
我目前正在做:
def getpattern(data):
pattern = ""
for c in data:
if c in ascii_uppercase: pattern += "L"; continue
if c in ascii_lowercase: pattern += "l"; continue
if c in digits: pattern += "n"; continue
pattern += "?"
但是,这很乏味,需要替换多个列表。我通常更擅长为这样的事情找到地图类型的算法,但我很难过。我不能让它替换任何已经被替换的东西。例如,如果我运行数字 1 并将其替换为“n”,则下一次迭代可能会将其替换为“l”,因为“n”是小写字母。
getpattern("Testing123") == "Lllllllnnn"
【问题讨论】:
-
您能否提供一个实际示例来说明您正在努力实现的目标?有很多方法可以将一个简单的字符串映射到另一个字符串,但您的实际情况可能会更加受限。控制字符(如 NULL 或 ACK)在 0-255 的序数范围内,即使不可打印,但如果您正在处理 Unicode 字符,则可能需要不同的方法。
-
选择的答案是理想的。我不相信我需要 Unicode,但如果我需要,我相信我可以让它工作。谢谢!