从拆分句中查找整数和字符串

时间:2016-11-13 18:17:37

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

我需要分割这个字符串:

"We shall win 100 dollars in the next 2 years" 

并返回一个带有整数和字符串([100,2],[We,shall,win,dollars,in,the,next,years])列表的元组。

到目前为止我的尝试:

lst_int =[]
    lst_str =[]
    tup_com =(lst_int,lst_str)
    words = input_string.split()
    for i in words:
        if i == int():
            lst_int.append(i)
        elif i != int():
            lst_str.append(i)
    return tup_com

3 个答案:

答案 0 :(得分:1)

你可以用简单的正则表达式

来做
import re
s = "We shall win 100 dollars in the next 2 years"

t = (re.findall("[0-9]+",s),re.findall("[a-zA-Z]+",s))

答案 1 :(得分:0)

您可以使用以下几种方法来实现:

1)检查isdigit

sentence = "We shall win 100 dollars in the next 2 years"

str_list=[]
int_list=[]
for word in sentence.split():
   if word.isdigit():
      int_list.append(int(word))  # cast at the same time
   else:
      str_list.append(word)

问题:如果数字为负数,则必须检查包含减号的数字,空格字符仍被视为有效数字,这使isdigit更复杂。这可能会导致你使用正则表达式,这是一个更复杂的,并使用正则表达式打开整数解析的盒子...(我甚至没有提到浮点数)

2)依赖python整数解析:

str_list=[]
int_list=[]
for word in sentence.split():
    try:
        int_list.append(int(word))
    except ValueError:
        str_list.append(word)

由于异常处理,速度稍慢,但在所有情况下都能正常工作,甚至可以推广用于浮点数。

答案 2 :(得分:0)

如果稍微调整一下你的情况就可以实现。 i == int()并没有真正按照您的想法行事; int()会返回0,因此您基本上会不断检查i == 0是否始终为False(导致所有内容都附加到lst_str。< / p>

相反,请在str.isdigit循环中使用for,如下所示:

if i.isdigit():
    lst_int.append(i)
else:
    lst_str.append(i)

str.isdigit遍历您提供的字符串中的字符,如果它们都是数字(并且字符串是非空的),则进行评估。

然后,tup_com会导致:

(['100', '2'], ['We', 'shall', 'win', 'dollars', 'in', 'the', 'next', 'years'])

顺便说一句,你在这里不需要tup_com,只需返回用逗号分隔的列表,然后创建一个包含它们的元组。

那是:

return lst_int, lst_str