如何计算字符串中包括转义序列在内的所有元素的数量?



我有一个字符串,我必须计算这个字符串中的所有元素。

str = 'rnrnrn rn xa0xa0rnIntroductionrnrnrnHellornrnWorldrnProblems...rnHow to calculate numbers...rnConclusionrnrnrnxa0rnrnHello world.'

这些元素包含数字、字母、转义序列、空白、逗号等。

有没有办法在Python中计算这类字符串中的所有元素?

我知道len()count()帮不上忙。我也尝试了一些regex方法,如re.findall(r'.', str),但它不能找到n这样的元素,也只能找到r而不能找到r

编辑:为了更清楚,我想将n计数为2,而不是1,并且xa0计数为4,而不是1。

在Python中是一个特殊字符,所以你必须像str = '\r\n 'str = r'rn '那样转义它们。之后,len()视为独立字符。

Python将您的字符串文字编译为Python字符串,其中转义字符序列(如n)将被替换为其等效的unicode字符(在本例中为unicode U-000A换行符)。len将把这两个字符序列算作一个字符。

当您的代码看到这个字符串时,原始的python文字转义序列已经消失了。但是repr表示又添加了转义序列。所以你可以取它的长度
>>> s = 'rnrnrn rn xa0xa0rnIntroductionrnrnrnHellornrnWorldrnProblems...rnHow to calculate numbers...rnConclusionrnrnrnxa0rnrnHello world.'
>>> print(len(s))
123
>>> print(len(repr(s)))
170

这不会100%准确,因为在字面值字符串中构造unicode字符的方法不止一种。例如,"n""x0a"都解码为相同的换行字符,并且无法知道它来自哪种形式。

或者,您可以使用"raw"不转义字符的字符串。因此,r"n"的长度为2。

最新更新