使用\numbger时re.sub的问题

2 投票
2 回答
512 浏览
提问于 2025-04-16 01:44

我正在尝试用正则表达式来整理一些文本,使用的是 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;"

撰写回答