【问题标题】:Split string into two parts only [duplicate]仅将字符串拆分为两部分[重复]
【发布时间】:2018-06-14 02:26:25
【问题描述】:

我有一个字符串

s = 'abcd qwrre qwedsasd zxcwsacds'

我想在第一次出现空格时将任何字符串分成两部分。 a='abcd'b='qwrre qwedsasd zxcwsacds'

如果我使用a, b=split(' '),它会给我一个错误,因为要解压的值太多。

【问题讨论】:

  • 使用maxsplit参数:a, b = s.split(maxsplit=1)

标签: python split


【解决方案1】:

你可以使用a,b = split(' ', 1)

第二个参数1 是最大拆分次数。

s = 'abcd efgh hijk'
a,b = s.split(' ', 1)
print(a) #abcd
print(b) #efgh hijk

有关字符串拆分功能的更多信息,请参阅str.split in the manual

【讨论】:

    【解决方案2】:

    来自Python docs

    str.split(sep=None, maxsplit=-1)

    返回字符串中的单词列表,使用 sep 作为分隔符 细绳。如果给出了 maxsplit,则最多完成 maxsplit 拆分(因此, 该列表最多包含 maxsplit+1 个元素)。如果 maxsplit 不是 指定或 -1,则拆分次数没有限制(所有 可能的拆分)。

    '1 2 3'.split(maxsplit=1)
    # ['1', '2 3']
    

    【讨论】:

    • 不错的一个 - 是否还有一个 minsplit 或其他东西可以使这项工作从反向开始?
    • 我尝试测试负值,但没有产生那种结果......我想这将面临无法将字符串拆分为至少 x 种方式的风险。跨度>
    • @sudonym 我不确定minsplit 会做什么。 "something".split(minsplit=2) 的预期结果是什么?
    • 反向操作,即仅在第一次/第二次出现后拆分?我会检查文档。
    • @sudonym 那是str.rsplit -- 从右边而不是左边分开。
    【解决方案3】:

    您可以使用标准字符串方法partition,它搜索给定的分隔符并返回一个三元组,由它之前的字符串部分、分隔符本身和它之后的部分组成。

    >>> s = 'abcd qwrre qwedsasd zxcwsacds'
    >>> s.partition(' ')
    ('abcd', ' ', 'qwrre qwedsasd zxcwsacds')
    

    【讨论】:

    • 虽然这可行,但我不确定它比在str.split 中使用maxsplit 更好
    • @AdamSmith 如果s 中没有空格,这会更方便一些,因为它仍然会返回3-tuple
    【解决方案4】:

    您在拆分中缺少一个参数,即出现次数,试试这个;

    s='abcd qwrre qwedsasd zxcwsacds'
    >>> a, b = s.split(' ', 1)
    >>> print(a, b)
    

    【讨论】:

      【解决方案5】:

      试试这个:

      s = 'abcd qwrre qwedsasd zxcwsacds'
      s1 = s.split()[0]
      s2 = ' '.join(s.split()[1:])
      print(s1)
      print(s2)
      

      输出:

      abcd
      qwrre qwedsasd zxcwsacds
      

      或者:

      new_s = ''.join([' s ' if i.isspace() else i for i in s])
      a,b = new_s.replace(' s','',1).split(' s ')
      print(a)
      print(b)
      

      输出:

      abcd
      qwrre qwedsasd zxcwsacds
      

      或者甚至更好地拆分制表符和换行符:

      a,b = s.split(None,1)
      print(a)
      print(b)
      

      输出:

      abcd
      qwrre qwedsasd zxcwsacds
      

      【讨论】:

        【解决方案6】:

        你可以通过使用python“星形表达式”来解决这个问题。

        s='abcd qwrre qwedsasd zxcwsacds'
        a = s.split()
        first, *second = a
        second = " ".join(second)
        

        “first”取列表的第一个元素,“*second”取其余元素。

        >>> first
        'abcd'
        >>> second
        'qwrre', 'qwedsasd', 'zxcwsacds'
        

        【讨论】:

          【解决方案7】:

          1.你可以这样拆分字符串。

          a = temp.substring(0, s.indexOf(' '));
          b = temp.substring(s.indexOf(' ') + 1);
          

          2.或者你可以这样做:

          a = s[0: s.find(' ')]
          b = s[s.find(' ') + 1: ]
          

          3。

          a,b = s.split(' ', 1)
          print(a)
          print(b) 
          

          【讨论】:

            【解决方案8】:

            所以,正如许多人指出的那样,您可以传递第二个参数:

            >>> a, b = "foo bar".split(' ', 1)
            

            但没有人指出这一点:

            >>> a, b = "foobar".split(' ', 1)
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            ValueError: need more than 1 value to unpack
            

            你不想使用它,因为它是不安全的,除非你保证有一个只有一个空格的字符串。最好先拆分它,然后检查您有多少拆分,然后解压缩它们:

            >>> parts = "foo bar".split(' ', 1)
            >>> if len(parts) == 2:
            >>>    a, b = parts 
            

            【讨论】:

              【解决方案9】:
              #!python2
              
              s='abcd qwrre qwedsasd zxcwsacds'
              
              s1 = s[0: s.find(' ')]
              s2 = s[s.find(' ') + 1: ]
              
              print s1
              print s2
              '''
              abcd
              qwrre qwedsasd zxcwsacds
              '''
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-28
                • 2017-04-15
                相关资源
                最近更新 更多