簡體   English   中英

Python 中的正則表達式在匹配行中添加空格

[英]Regular Expression in Python to add Space in matching Line

我有一個文本文件,其中一些行包含如下數據。 我想通過在開頭添加更多空間來替換與這些模式匹配的行(即,目前這些行有 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)

我現在需要有關如何替換文本以低於 output 的指導。 我可以使用 re.Sub ,但是我如何才能添加空格而不替換原始行中的其他字符,該字符應該僅用於匹配模式。

Output:

                              9
                              1P
                              PKC
                              ABC1
                              1BC1C
                              ZBC12X
                              A4C12XZ
                              H4C12XZQ
                              94C12XZQQ
                              Q4C12XZQQT
                              A4C12XZQQTY

我建議使用以下正則表達式: https://regex101.com/r/6crgHK/1

然后,您的替換模式將是:

import re

input_file = open("1.txt", "r")

pattern = re.compile(r'\s+([\dA-Z]+)$')

for line in input_file:
    if re.match(pattern, line):
        line = re.sub(pattern, r'34spaces\1', line)
        print(line)

當然,您需要用實際的 34 個空格替換34spaces部分。 :)

> import re
> 
> input_file = open("1.txt", "r") space = ' ' * 14 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 (space + line)

這可能會奏效。 我只是在與您的查詢匹配的任何行前面加上 14 個空格,然后將空格和您的行連接起來以打印 14 個空格,然后是您的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM