为什么python regex.sub方法删除\ fr?

时间:2018-08-15 05:42:39

标签: regex python-2.7 jupyter-notebook

我有以下代码:

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在哪里?

我想念什么?

2 个答案:

答案 0 :(得分:3)

它不会删除它,但是\ f是换页符号。您必须使用额外的\作为\\frac...来对其进行转义,或者像在第二个字符串r'\frac...

之前一样在r前面添加原始字符串

答案 1 :(得分:2)

反斜杠在Python字符串文字(see docs)中具有特殊含义。

写时:

a = '\frac...'

Python看到的是:“创建一个名为a的变量,并为其分配一个字符串,该字符串由'ASCII Formfeed' character \fr,{{ 1}},ac..。” 换页符是控制字符,它仍然存在,但是当它不可见时您将打印字符串。

如果您打算在字符串中保留实际的.,则必须转义反斜杠

'\f'

这样,Python就会看到“创建一个名为a = '\\frac...' 的变量,并为其分配一个字符串,该字符串由a\f,{{1 }},rac.。”

或者您使用原始字符串,它会禁用“反斜杠具有特殊含义”机制:

.

原始字符串的优势:将反斜杠用作反斜杠变得更加容易。
原始字符串的缺点:插入换行符或制表符之类的特殊字符变得越来越困难。