【问题标题】:Get string inbetween text Python在文本Python之间获取字符串
【发布时间】:2014-04-28 06:55:02
【问题描述】:

如果我有:

127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"

如何将“josh”和“12345”提取到它们自己的变量中?

【问题讨论】:

    标签: python string variables python-2.7


    【解决方案1】:

    您可以使用以下代码,假设以下所有字符串的格式相同:

    >>> info = '127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"'
    >>> name = info.split()[-1].split('&')[0].split('=')[1]
    >>> code = info.split()[-1].split('&')[1].split('=')[1]
    >>> name
    'josh'
    >>> code
    '12345'
    

    第一个.split()是获取整个字符串为一个列表。

    [-1] 是获取列表中的最后一项。

    .split('&') 是用'&' 分割最后一个序列。

    [0][1]是指定我们要获取哪个值,名称或代码。

    split('=')是将每个值用等号分割,这样我们就可以将名称或代码作为一个值来获取。

    最后一个[1]是获取最后一个值,基本上排除了'name'或者'zipcode'

    【讨论】:

      【解决方案2】:

      你可以使用拆分功能...

      o = "name=josh&zipcode=12345"
      
      a = o.split('&') # ['name=josh', 'zip=12345']
      d = dict(s.split('=') for s in a)
      

      会给你一个很好的键值对字典:)

      {'name':'josh','zip':12345}
      

      或者您可以根据需要使用其他东西...http://docs.python.org/2/library/string.html

      string.find(s, sub[, start[, end]])
          Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices.
      

      【讨论】:

        【解决方案3】:

        用空格分割字符串,取最后一个元素,去掉引号,使用urlparse.parse_qsl()解析查询参数:

        >>> from urlparse import parse_qsl
        >>> s = '127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"'
        >>> params = parse_qsl(s.split()[-1].strip('"'))
        >>> params
        [('name', 'josh'), ('zipcode', '12345')]
        

        然后,要将变量分配给参数值,您可以解压缩params

        >>> name, zipcode = zip(*params)[1]
        >>> name
        'josh'
        >>> zipcode
        '12345'
        

        【讨论】:

          猜你喜欢
          • 2018-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-18
          • 1970-01-01
          • 2013-02-09
          • 1970-01-01
          相关资源
          最近更新 更多