将字符串仅拆分为两部分

36

我有一个字符串

s = 'abcd qwrre qwedsasd zxcwsacds'
我想将任何字符串仅在第一个空格处拆分为两部分。 例如a ='abcd'b ='qwrre qwedsasd zxcwsacds' 如果我使用a,b = split(' '),它会给出错误,因为有太多的值需要拆分。

3
使用maxsplit参数:a, b = s.split(maxsplit=1)。该参数用于指定分割字符串的次数,将字符串s分割成最多maxsplit个子字符串,并将它们存储在变量ab中。 - Paul Panzer
9个回答

49
你可以使用a,b = split(' ',1)。第二个参数1是将执行的最大拆分次数。
s = 'abcd efgh hijk'
a,b = s.split(' ', 1)
print(a) #abcd
print(b) #efgh hijk

有关字符串分割函数的更多信息,请参见手册中的str.split


13

来自Python文档

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

使用sep作为分隔符字符串,返回字符串中的单词列表。如果给出了maxsplit,则最多进行maxsplit次拆分(因此,该列表最多将具有maxsplit + 1个元素)。如果未指定maxsplit或为-1,则对拆分数量没有限制(将进行所有可能的拆分)。

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

不错 - 是否也有minsplit或其他东西可以使其从反向工作? - sudonym
我尝试测试负值,但没有得出那样的结果...... 我猜这将冒着无法将字符串最少分割为x个部分的风险。 - ajxs
@sudonym 我不确定 minsplit 会做什么。"something".split(minsplit=2) 的预期结果是什么? - Adam Smith
操作相反,即仅在第一个/第二个最后出现之后拆分?我会查看文档。 - sudonym
3
@sudonym 这是 str.rsplit -- 从右侧开始分割,而不是从左侧。 - Adam Smith

12
你可以使用标准字符串方法 partition,该方法搜索给定的分隔符并返回一个由三部分组成的元组,包括分隔符之前的字符串部分、分隔符本身以及之后的部分。
>>> s = 'abcd qwrre qwedsasd zxcwsacds'
>>> s.partition(' ')
('abcd', ' ', 'qwrre qwedsasd zxcwsacds')

虽然这个方法可行,但我不确定它比在 str.split 中使用 maxsplit 更好。 - Adam Smith
3
如果s中没有空格,这会更加方便,因为它仍然会返回一个3元组。 - Paul Panzer

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

5

你的split函数缺少一个参数,即分割的次数,请尝试使用以下代码:

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

3

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) 

3
您可以通过使用Python的“星号表达式”来解决该问题。
s='abcd qwrre qwedsasd zxcwsacds'
a = s.split()
first, *second = a
second = " ".join(second)

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

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

2

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

>>> 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 

1
#!python2

s='abcd qwrre qwedsasd zxcwsacds'

s1 = s[0: s.find(' ')]
s2 = s[s.find(' ') + 1: ]

print s1
print s2
'''
abcd
qwrre qwedsasd zxcwsacds
'''

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接