【问题标题】:Extracting a substring from a string in python based on Delimiterpython中基于Delimiter从字符串中提取子字符串
【发布时间】:2017-10-06 01:07:45
【问题描述】:

我有一个输入字符串,如:-

    a=1|b=2|c=3|d=4|e=5 and so on...

我想做的是从一个很长的类似模式的字符串中提取 d=4 部分。有没有办法根据起点分隔符和终点分隔符获取子字符串?

这样,我可以从 'd=' 开始搜索直到 '|'提取其价值。欢迎任何见解。

【问题讨论】:

    标签: python string python-2.7 python-3.x substring


    【解决方案1】:

    你可以试试这个 "startswith" ,具体你想要哪个变量的值

     string = " a=1|b=2|c=3|d=4|e=5 "
     array = string.split("|")
     for word in array:
         if word.startswith("d"):
         print word
    

    【讨论】:

      【解决方案2】:

      你可以在这里使用regex

      >>> data = 'a=1|b=2|c=3|d=4|e=5'
      >>> var = 'd'
      >>> output = re.search('(?is)('+ var +'=[0-9]*)\|',data).group(1)
      >>> print(output)
      'd=4'
      

      或者您也可以使用split,这是更推荐的选项:

      >>> data = 'a=1|b=2|c=3|d=4|e=5'
      >>> output = data.split('|')
      >>> print(output[3])
      'd=4'
      

      或者你也可以使用dic

      >>> data = 'a=1|b=2|c=3|d=4|e=5'
      >>> output = dict(i.split('=') for i in data.split('|'))
      {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5'}
      >>> output ['d']
      '4'
      

      【讨论】:

      • i[0]:i[2] 不适用于 'foo=123' 之类的子字符串。
      • @timgeb 请检查!
      • 是的,这行得通。但是现在你必须在= 上调用split 两次,这就是为什么我对存储整数的字典使用for 循环,
      • @timgeb 绝对可以,我也可以使用dict() 来实现同样的效果,应该吗?
      • 是的,dict 构造函数接受一个可迭代的 2 元素元组,并且在 = 上拆分会生成这些元组。
      【解决方案3】:

      构建字典!

      >>> s = 'a=1|b=2|c=3|d=4|e=5'
      >>> dic = dict(sub.split('=') for sub in s.split('|'))
      >>> dic['d']
      '4'
      

      如果要存储整数值,请使用for 循环:

      >>> s = 'a=1|b=2|c=3|d=4|e=5'
      >>> dic = {}
      >>> for sub in s.split('|'):
      ...     name, val = sub.split('=')
      ...     dic[name] = int(val)
      ... 
      >>> dic['d']
      4
      

      【讨论】:

      • 我很可能会误解,但是 OP 声明他需要它作为子字符串,而不是以某种方式访问​​该值。
      • 嗨@Mayank Jha,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 2023-01-07
      • 2016-06-01
      • 2011-07-21
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多