如何阻止 Python 识别字符串文字,例如“\n”或“\b”?
How can I stop Python from recognizing string literals such as "\n" or "\b"?
我正在使用 API 将 LaTeX 转换为 PNG 格式。我正在转换的乳胶字符串是用乳胶、.tex 编写的,因此它们使用诸如 '\n' 之类的短语。
我的字符串示例是
query = "$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
然而,Python 识别 \binom
中的 \b
,因此字符串被识别为有换行符,即使我想让它做的只是识别个人字符。
如果可能的话,我希望不必修改字符串本身,因为该字符串也是从 API 中获取的。那么有什么方法可以忽略这些字符串文字,例如'\b'或'\n'?
使用r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
。这称为 原始字符串 。您可以阅读更多相关信息 here
通常,您可以使用以下格式的原始字符串:
普通字符串:
'Hi\nHow are you?'
输出:
Hi
How are you?
原始字符串:
r'Hi\nHow are you?'
输出:
Hi\nHow are you?
为了清楚起见,我更新了我的答案。
如果字符串直接来自 API,那么它应该已经是原始格式(或者您可以访问的最原始格式),例如 r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
。因此,Python 不会假设转义字符,也不应该有问题。
要回答有关原始字符串的其他问题 - 要在 Python 中将字符串打印为原始字符串,请尝试 repr
函数,该函数 returns 给定的可打印表示字符串对象。
query = "$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
print(repr(query))
这是输出:
'$\displaystyle \x08inom n r = \dfrac{n!}{r!(n-r)!}$'
注意,在上面query
的真实原始数据中,\b
字符在技术上仍然存储为\b
编码(或\x08
),而不是两个独立的字符。您可能会问,为什么 \d
不存储为编码?因为 \d
不是有效的编码转义序列,所以它被忽略并且 Python 将 \
视为一个字符。 (啊……默默无视解析错误,这不就是我们喜欢Python的原因吗?)
那么这个例子呢?
query = r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
print(repr(query))
看起来不错,但等等,Python 打印 '$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$'
。
为什么 \
?好吧,repr
函数 returns 给定对象的可打印表示字符串,因此为了避免混淆,\
字符被 \
正确转义,创建 \
.
所有这一切又回到了你的问题 - 如果字符串的值直接来自 API 调用,那么字符串数据应该已经从二进制编码和转义之类的东西转换而来序列应该不是问题(因为它们不在原始数据中)。但是在您提供的示例中,您以 query = "st\ring"
格式声明了一个字符串,不幸的是,这不等同于从 API 中检索字符串,显而易见的解决方案是使用 query = r"st\ring"
格式。
我正在使用 API 将 LaTeX 转换为 PNG 格式。我正在转换的乳胶字符串是用乳胶、.tex 编写的,因此它们使用诸如 '\n' 之类的短语。
我的字符串示例是
query = "$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
然而,Python 识别 \binom
中的 \b
,因此字符串被识别为有换行符,即使我想让它做的只是识别个人字符。
如果可能的话,我希望不必修改字符串本身,因为该字符串也是从 API 中获取的。那么有什么方法可以忽略这些字符串文字,例如'\b'或'\n'?
使用r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
。这称为 原始字符串 。您可以阅读更多相关信息 here
通常,您可以使用以下格式的原始字符串:
普通字符串:
'Hi\nHow are you?'
输出:
Hi
How are you?
原始字符串:
r'Hi\nHow are you?'
输出:
Hi\nHow are you?
为了清楚起见,我更新了我的答案。
如果字符串直接来自 API,那么它应该已经是原始格式(或者您可以访问的最原始格式),例如 r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
。因此,Python 不会假设转义字符,也不应该有问题。
要回答有关原始字符串的其他问题 - 要在 Python 中将字符串打印为原始字符串,请尝试 repr
函数,该函数 returns 给定的可打印表示字符串对象。
query = "$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
print(repr(query))
这是输出:
'$\displaystyle \x08inom n r = \dfrac{n!}{r!(n-r)!}$'
注意,在上面query
的真实原始数据中,\b
字符在技术上仍然存储为\b
编码(或\x08
),而不是两个独立的字符。您可能会问,为什么 \d
不存储为编码?因为 \d
不是有效的编码转义序列,所以它被忽略并且 Python 将 \
视为一个字符。 (啊……默默无视解析错误,这不就是我们喜欢Python的原因吗?)
那么这个例子呢?
query = r"$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$"
print(repr(query))
看起来不错,但等等,Python 打印 '$\displaystyle \binom n r = \dfrac{n!}{r!(n-r)!}$'
。
为什么 \
?好吧,repr
函数 returns 给定对象的可打印表示字符串,因此为了避免混淆,\
字符被 \
正确转义,创建 \
.
所有这一切又回到了你的问题 - 如果字符串的值直接来自 API 调用,那么字符串数据应该已经从二进制编码和转义之类的东西转换而来序列应该不是问题(因为它们不在原始数据中)。但是在您提供的示例中,您以 query = "st\ring"
格式声明了一个字符串,不幸的是,这不等同于从 API 中检索字符串,显而易见的解决方案是使用 query = r"st\ring"
格式。