【发布时间】:2021-06-25 16:38:11
【问题描述】:
我有一个如下所示的字符串列表:
elements = ['abc\n', 'def\t']
我想获取raw string 的长度,即在它编译转义字符之前。如果它们位于单个变量中,我知道该怎么做,例如:
org = 'abc\n' # Original string
len(org) # Will give 4
raw = r'abc\n' # Raw string
len(raw) # Will give 5 as it counts the \n as 2 chars
我试过这样做,但它不起作用,任何帮助将不胜感激。
for e in elements:
print(len(e)) # Gives length of compiled string
print(len(re)) # Throws error
print(len(r+e)) # Throws error
【问题讨论】:
-
r告诉如何存储文字字符串,一旦存储就无法更改,也无法访问其“原始格式” -
你应该对字符串和原始字符串做更多的研究。
r说明符只是表示必须将反斜杠解释为文字反斜杠,而不是转义下一个字符。在编译原始字符串中的转义字符之前没有存储一些“原始字符串”——它将\n解释为换行符。 -
"原始字符串的长度,即在它编译转义字符之前"没有这样的东西。首先,转义字符不是“编译”的;它们被解析。其次,这发生在您的任何代码有机会运行之前。第三,任何给定的字符串都可以通过多种不同的方式创建——它不一定有任何这样的来源需要考虑。
r前缀通过更改规则 起作用,Python 使用该规则来解析文字源。这不是对已经存在的字符串的某种操作。 -
一旦您了解了原始字符串的实际含义,一个简单的解决方案是计算需要转义的特殊字符的数量并将其添加到字符串的长度中。
-
可能适合您的目的的一种可能性是考虑使用
repr获得的字符串的表示。这将包括一个可能的 转义序列集,这些转义序列可以产生来自源代码的原始字符串。它还将包括开头和结尾的引号。