【问题标题】:Python split string with delimiterPython 用分隔符分割字符串
【发布时间】:2021-06-12 21:42:10
【问题描述】:

我试图将它放在一个数组中,但没有保留以 # 开头的 cmets,也没有第一个“-”。

      - https://site1                                                             # site1
      - https://site2                                                     # site2
      - https://site3                                                           # site3
      - https://site4                                             # ssite4

我不知道是否必须在将每行放入数组之前或之后删除它的结尾。 如果我放入一个删除空格等的数组中,我有类似的东西:

['-https://site1#site1', '-https://site2#site2', '-https://site3#site3', '-https://site4#site4']

我只想保留网站。 预期结果:

['https://site1', 'https://site2', 'https://site3', 'https://site4']

【问题讨论】:

  • 如果没有现有代码,很难显示哪里出了问题。
  • 如果您遍历这些行然后得到line.split()[1] 的值(其中line 是一行)。

标签: python string parsing split yaml


【解决方案1】:

regex 的一种方式:

import re 
  
def findUrlFromString(string): 
  
    regex = r"(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))"
    url = re.findall(regex,string)       
    return [x[0] for x in url] 
      
string = """
   - https://site1                                                             # site1
      - https://site2                                                     # site2
      - https://site3                                                           # site3
      - https://site4                                             # ssite4
"""
print(findUrlFromString(string))

工作演示: https://rextester.com/LEHDE94008

列表理解的另一种方式,

list_of_urls = ['-https://site1#site1', '-https://site2#site2', '-https://site3#site3', '-https://site4#site4']
result = [i.split('#')[0].lstrip('-') for i in list_of_urls]
print(result)

工作演示: https://rextester.com/VNW41814

【讨论】:

  • 第二种使用列表的方法效果很好,谢谢
  • @Michael003 很高兴它能以某种方式帮助你:)
【解决方案2】:

url.lstrip(“-“).split(“#”)[0] 应该可以工作

【讨论】:

    【解决方案3】:

    这是一个非常简单的方法。给定您的输入字符串作为列表:

    raw_list = ["- https://site1                                                # site1",
           "- https://site2                                                     # site2",
           "- https://site3                                                   # site3",
           "- https://site4                                             # ssite4"
          ]
    

    我创建了一个输出列表来存储已清理的字符串。然后遍历列表并删除所有不需要的字符

    def sanitize_string(raw_string):
        #strip all leading and trailing whitespace
        raw_string.strip()
        #remove leading "-" character
        if raw_string[0] == "-":
            raw_string = raw_string[1:]
        #remove comment from line
        if "#" in raw_string:
            raw_string = raw_string.split("#")[0]
        #once again remove leading and trailing whitespace
        return raw_string.strip()
    
    
    raw_list = ["- https://site1                                                             # site1",
               "- https://site2                                                     # site2",
               "- https://site3                                                           # site3",
               "- https://site4                                             # ssite4"
              ]
    sanitized_list = list()
    
    for entry in raw_list:
        sanitized_list.append(sanitize_string(entry))
    
    [print(x) for x in sanitized_list]
    

    这种方法存在根本的局限性。如果字符串恰好以“n-”开头,则前导条将无法正常工作。我相信您会想要寻找“https://”或任何其他 Web 标头作为字符串的开头,而不是假设格式。

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 2017-03-25
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多