在Python中仅替换正则表达式字符串的一部分的方法

左轮手枪奥沙沃特

我正在处理一个文本文件,其文本布局如下:

SCN DD1251       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
        DD1271      C           DD1271    R                                     
        DD1351      D           DD1351    B                                     
                    E                                                           
                                                                                
SCN DD1271       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
        DD1301      T           DD1301    A                                     
        DD1251      R           DD1251    C                                     
                                                                                
SCN DD1301       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
        DD1271      A           DD1271    T                                     
                    B                                                           
                    C                                                           
                    D                                                           
                                                                                
SCN DD1351       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
                    A           DD1251    D                                     
        DD1251      B                                                           
                    C   

我目前正在使用以下正则表达式模式来匹配节点,后跟 5 个宽空格和以下字母,如下所示:

DD1251      B

[A-Z]{2}[0-9]{3}[0-9A-Z]      [A-Z]

我的目标是用下划线替换 5 宽空间,如下所示:

DD1251_B

我正在尝试使用以下代码来实现这一点:

def RemoveLinkSpace(input_file, output_file, pattern):
  with open(str(input_file) + ".txt", "r") as file_input:
    with open(str(output_file) + ".txt", "w") as output: 
        for line in file_input:
               line = pattern.sub("_", line)
               output.write(line)

upstream_pattern = re.compile(r"[A-Z]{2}[0-9]{3}[0-9A-Z]      [A-Z]")

RemoveLinkSpace("File1","File2",upstream_pattern)

但是,这会生成一个类似于以下模式的文本文件:

SCN DD1251       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
        _      C           DD1271    R                                     
        _      D           DD1351    B                                     
                    E                                                           
                                                                                
SCN DD1271       
            UPSTREAM               DOWNSTREAM               FILTER              
          NODE     LINK          NODE    LINK                LINK               
        _      T           DD1301    A                                     
        _      R           DD1251    C      

                           

我的问题是,有没有办法仍然搜索整个正则表达式,但只替换其中包含的空格?

高级网络工程师

我们可以按组替换,你错过了这一点。\1 表示第一组,\2 第二组 所以在搜索模式中 ([AZ]{2}[0-9]{3}[0-9A-Z]) 是第一个模式,([AZ]) 是第二个模式.
此外,组 1 和组 2 之间的空间不存在 5,只有 6。所以我搜索了 5 个继续空间。

def RemoveLinkSpace(input_file, output_file, pattern):
  with open(str(input_file) + ".txt", "r") as file_input:
    with open(str(output_file) + ".txt", "w") as output: 
        for line in file_input:
               line = re.sub(pattern,r"\1_\2", line)
               output.write(line)

upstream_pattern = re.compile(r"([A-Z]{2}[0-9]{3}[0-9A-Z])[ ]{5,}([A-Z])")


RemoveLinkSpace("in","out", upstream_pattern)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用正则表达式替换字符串的一部分

在python中通过正则表达式提取字符串的一部分

Perl字符串替换:匹配但不替换正则表达式的一部分

正则表达式删除字符串的一部分,然后替换另一部分

使用正则表达式搜索,但仅用 sed 替换字符串的一部分

在Javascript中使用正则表达式替换html字符串的一部分

正则表达式,总是在末尾替换字符串的一部分

用匹配的正则表达式的一部分替换字符串

跳过字符串的一部分,并用正则表达式替换匹配项

PHP查找并用正则表达式替换字符串的一部分

如何使用正则表达式替换字符串的一部分

如何使用正则表达式替换字符串的一部分

正则表达式,用于替换包含单引号(')的字符串的一部分

如何使用正则表达式仅提取匹配字符串的一部分?

使用正则表达式在php中用字符串中的值搜索和替换字符串的一部分

正则表达式选择字符串的一部分

正则表达式匹配字符串的一部分

正则表达式不匹配字符串的一部分

用正则表达式屏蔽字符串的一部分

正则表达式匹配字符串的最后一部分

正则表达式保留字符串的一部分

使用正则表达式屏蔽字符串的一部分

正则表达式-获取字符串的一部分

正则表达式PHP字符串的一部分

正则表达式,用于捕获字符串的一部分

使用正则表达式匹配字符串的一部分

PHP正则表达式多行字符串的一部分

使用正则表达式检测特殊字符串并仅替换其中一部分

Python正则表达式提取字符串的一部分