使用\numbger时re.sub的问题
我正在尝试用正则表达式来整理一些文本,使用的是 re.sub
。
假设我有一个几乎是CSV格式的文件,我需要清理一下,让它完全变成CSV格式。
我用下面的代码把所有的 \t 替换成了 \n:
t = t.replace("\n", "\t")
... 这样做效果很好。接下来,我需要把每一行的 \t 再换回 \n。为此,我使用了这个表达式:
t = re.sub("\t(\d*?);", "\n\1;", t, re.U)
问题是这个方法虽然有效,但只部分有效。换成的 \n 是正确的,但它们后面跟着的不是我想要的内容,而是一个 ^A(根据Vim的说法)。
我用 re.findall
测试了我的正则表达式,结果很好……你觉得可能出什么问题呢?
我的CSV行最终应该是这样的:
number;text;text;...;...;\n
谢谢你的帮助!
2 个回答
0
就像Scharron说的,使用正则表达式时,记得一定要用原始字符串(r'')的写法。养成这个习惯后,你就不需要再去调试那些奇怪的问题了。
r'\n\1;'
4
你的 \1
被解释成了 ASCII 字符 1。试试用 \\1
或者 r"\n\1;"
。