【问题标题】:Regex Pyhon: cannot replace newlines with "$1" [closed]正则表达式 Python:不能用“$1”替换换行符 [关闭]
【发布时间】:2021-06-22 22:00:28
【问题描述】:

我有正则表达式 \n([\d]) 可以匹配以下文本:

然后我想在 Visual Studio Code 中用第一组或$1 替换匹配的文本。结果如下:

我想在 python 中实现同样的想法,我已经编写了这段代码。

import re    

file = "out FCE.txt"    
pattern = re.compile(".+")

for i, line in enumerate(open(file)):
    for match in re.finditer(pattern, line):
        print(re.sub(r"\n([\d])", r"\1", match.group()))

但是该代码对它没有任何作用。这意味着结果仍然与第一张图片相同。不会删除换行符和第一个字符处带有数字的行。我已经读过this answer,python 使用的是\1 而不是$1。是的,我想保留空格之间的空格,以便像\t\t\t 一样整洁。

对不起,如果我的解释令人困惑,而且我的英语不好。

【问题讨论】:

  • 在调用re.sub时使用原始字符串:re.sub(r'\n([\d])', r'\1', match.group())
  • 您需要使用原始字符串或转义反斜杠...
  • 我试过了,但根本不起作用。结果还是一样。
  • 为什么要把\d 放在[\d] 中? \d 不工作吗?

标签: python regex visual-studio-code


【解决方案1】:

这里的问题是您正在逐行读取文件。在for i, line in enumerate(open(file)):的每个循环中,re.sub只访问一行,因此无法查看下一行是否以数字开头。

试试吧:

import re

file = "out FCE.txt"

with open(file, 'r') as f:
    text = f.read()

new_text = re.sub(r"\n([\d])", r"\1", text)
print(new_text)

在这段代码中,文件被作为一个整体读取(进入变量text),因此re.sub 现在可以查看后续行是否以数字开头。

【讨论】:

  • 哇,谢谢你。但是如果我仍然想枚举文件呢?有什么办法吗?
  • 我认为循环遍历每一行是不可能的(或者可能有办法,但我想这会很丑陋。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
相关资源
最近更新 更多