【发布时间】:2019-11-13 23:07:59
【问题描述】:
我有一个文本文件,其中一些行包含如下数据。 我想通过在开头添加更多空间来替换与这些模式匹配的行(即,目前这些行有 14 个空间,我想将其设为 34)。
我不能只将 14 个空格替换为 34 个,因为还有其他行也有 14 个空格但不匹配下面的模式。
9
1P
PKC
ABC1
1BC1C
ZBC12X
A4C12XZ
H4C12XZQ
94C12XZQQ
Q4C12XZQQT
A4C12XZQQTY
我正在使用所有 11 个单独的代码来搜索这 11 个模式,如下所示:
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$
以下是我正在使用的 Python 代码。
import re
input_file = open("1.txt", "r")
for line in input_file:
if re.match('[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]$', line):
print (line)
我现在需要有关如何替换文本以获得低于输出的指导。我可以使用 re.Sub,但是我如何才能添加空格而不替换原始行中的其他字符,该字符应该仅用于匹配模式。
输出:
9
1P
PKC
ABC1
1BC1C
ZBC12X
A4C12XZ
H4C12XZQ
94C12XZQQ
Q4C12XZQQT
A4C12XZQQTY
【问题讨论】:
-
@toolic 当我们使用它时,我们可以放弃方括号`{14}`。 @Rahul 看起来您是正则表达式的新手,对一些常见的特殊字符代表什么感到困惑。我建议您访问 regex101.com 并进行试验,或查看此问题的答案以获得一般的正则表达式参考:stackoverflow.com/questions/22937618/…
-
您可以在 2 组中匹配 14 个空格和 1-11 倍的字符类
[A-Z0-9]并替换为 2 组\1extraspaceshere\2像^( {14})([0-9A-Z]{1,11})见 regex101.com/r/DG3FNF/1 -
@第四只鸟:谢谢,这听起来很有帮助。我正在浏览此链接并尝试合并更改。如果有任何问题或有效,将发布。
-
@CAustin:感谢您分享链接,我确实是新手,但会尝试通过此链接并根据我的要求进行更改。