【问题标题】:Why does the python regex.sub method delete \fr?为什么 python regex.sub 方法会删除 \fr?
【发布时间】:2018-08-15 05:42:39
【问题描述】:
我有以下代码:
import re
a = '\frac{{P_{\mathrm{0p}}}^2}{P_{\mathrm{0p}}+R} & \frac{31}{30}'
b = re.sub(r'\\mathrm\{([0pr]+)\}', r'\1', a)
print b
我得到了这个结果:
rac{{P_{0p}}^2}{P_{0p}+R} & rac{31}{30}
\f 在哪里?
我错过了什么?
【问题讨论】:
标签:
regex
python-2.7
jupyter-notebook
【解决方案1】:
它不会删除它,但 \f 是换页的符号。您必须使用额外的 \ 将其转义为 \\frac... 或通过在第二个字符串 r'\frac... 上添加 r 来使用原始字符串。
【解决方案2】:
反斜杠在 Python 字符串文字中具有特殊含义 (see docs)。
当你写作时:
a = '\frac...'
Python 看到的是:"创建一个名为 a 的变量并为其分配一个字符串,该字符串由 'ASCII Formfeed' character \f、r、a、c、@987654329 组成@、.、.。” 换页符是一个控制字符,它仍然存在,但在打印字符串时它不可见。
如果您要在字符串中保留实际的'\f',则必须转义反斜杠:
a = '\\frac...'
Python 看到这种方式 “创建一个名为 a 的变量并为其分配一个由 \、f、r、a、c、. 组成的字符串,.,.。"
或者你使用一个原始字符串,它会禁用“反斜杠有特殊含义”机制:
a = r'\frac...'
原始字符串的优势:使用反斜杠作为反斜杠变得更容易。
原始字符串的缺点:使用插入特殊字符(如换行符或制表符)变得更加困难。