zoukankan      html  css  js  c++  java
  • 如何在python中使用正则表达式从多行字符串中删除特定字符


    我有一个如下所示的多行字符串:

    st = '''emp:firstinfo
    
           :secondinfo
    
           thirdinfo
         '''
    print(st)
    

      

    我正在尝试做的是从我的字符串中跳过第二个':',并获得如下所示的输出:

     

    '''emp:firstinfo
    
       secondinfo
    
       thirdinfo
       '''
    

      

    简单说,如果它以':'开头,我只想忽略它。

     

    这是我所做的:

    mat_obj = re.match(r'(.*)
    *([^:](.*))
    *(.*)' , st)
    print(mat_obj.group())
    

      显然,我没有看到我的错误,但是谁可以帮助我告诉我哪里出错了吗?


    1 Answer:


    您可以在此正则表达式中使用re.sub:

    >>> print (re.sub(r'([^:
    ]*:[^:
    ]*
    )s*:(.+)', r'12', st))
    emp:firstinfo
    secondinfo
    
           thirdinfo
    

      
    正则表达式详细信息:

    (: 开始第一个捕获组
    [^:
    ]*: 匹配0个或多个不是:的任何字符和换行符
    :: 匹配冒号
    [^:
    ]*: 匹配0个或多个不是:的任何字符和换行符
    
    : 匹配换行
    ): 结束第一个捕获组
    s*: 匹配0个或多个空格
    ::匹配一个冒号
    (.+): 匹配第二个捕获组中的任何一个或多个字符(换行符除外)
    12: 用于替换组1和2中捕获的子字符串。
    

     2 Answer:


    您可以改用sub,只是不要捕获不需要的部分。

    (.*
    )[^:]*:(.*
    )(.*)
    

      

    123
    

      

     替换为

    import re
    
    regex = r"(.*
    )[^:]*:(.*
    )(.*)"
    
    test_str = ("emp:firstinfo\n
    "
        "       :secondinfo\n
    "
        "       thirdinfo")
    
    subst = "\1\2\3"
    
    # You can manually specify the number of replacements by changing the 4th argument
    result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
    

      

     

  • 相关阅读:
    Rate Control Mode
    帝国的困境:80-20法则
    ARM NEON 64bit 查找表替换
    Video Brightness Enhancement
    HDR(High Dynamic Range)
    C++ C++
    Machine Learning
    图像处理
    Facial landmark detection
    git
  • 原文地址:https://www.cnblogs.com/daniumiqi/p/12175067.html
Copyright © 2011-2022 走看看