【问题标题】:Extract subdomains from strings using split in python在python中使用split从字符串中提取子域
【发布时间】:2020-04-26 22:05:14
【问题描述】:

我有一个输出/打印以下内容的 python 函数:

['CN=*.something1.net', 'CN=*.something2.net', 'CN=*.something4.net', 'CN=something6.net', 'CN=something8.net', 'CN=intranet.something89.net', 'CN=intranet.something111.net, 'OU=PositiveSSL Multi-Domain, CN=something99.net', 'OU=Domain Control Validated, CN=intranet.something66.net',...etc] 

我正在尝试使用python中的split()方法提取“CN =”和单引号之间的所有子域名。我试过split('CN=', 1)[0],但我不知道如何使用它

我要打印的内容:

['something1.net', 'something2.net', 'something4.net', 'intranet.something111.net', 'intranet.something66.net']

任何帮助将不胜感激:-)

谢谢,MJ

【问题讨论】:

    标签: python-3.x list split


    【解决方案1】:

    最后一个单引号表示字符串的结尾,因此您似乎只想要CN= 之后的所有内容。假设是这种情况,您可以直接砍掉前三个字符:

    subdomains = [item[3:] for item in my_list if item.startswith('CN=')]
    

    【讨论】:

      【解决方案2】:

      这是一个更易读的代码,它以更干净或更好的方式提取子域; @tzaman 代码并没有真正给我子域。

      myDirtyDomains = ['CN=*.something1.net', 'CN=*.something2.net', 'CN=*.something4.net',\
      'CN=something6.net', 'CN=something8.net', 'CN=intranet.something89.net',\
       'CN=intranet.something111.net', 'OU=PositiveSSL Multi-Domain', \
       'CN=something99.net', 'OU=Domain Control Validated', 'CN=intranet.something66.net']
      
      cleanSubDomainsList = []
      
      for item in myDirtyDomains:
          countDots = item.count(".")
          if countDots == 2:
              host = item.partition('CN=')[2]
              subdomain = host.partition('.')[0]
              cleanSubDomainsList.append(subdomain)
      
      print(cleanSubDomainsList)
      

      【讨论】:

        【解决方案3】:

        如果你只想从每个字符串中去除CN=,你可以使用str.lstrip()从左边去除:

        subdomains = [item.lstrip("CN=") for item in my_list]
        

        【讨论】:

          猜你喜欢
          • 2016-06-01
          • 1970-01-01
          • 2023-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 2021-05-01
          相关资源
          最近更新 更多