有关python中拆分的说明

时间:2017-06-24 13:11:14

标签: python string split

我有这个任务。

st = 'print only the words that sstart with an s in the sstatement'

,解决方案将是

for word in st.split():
    if word[0] == 's':
        print word

为什么不能使用

for word in st.split():
    if word[1] == 's':
        print word

我有点理解零代表什么,但我怎么能用第二个字母打印这些单词'。

1 个答案:

答案 0 :(得分:2)

其中一个问题是无法保证字符串的长度足够。例如,空字符串('')或带有一个字符('s')的字符串也可能最终出现在单词列表中。

快速解决方法是使用长度检查:

for word in st.split():
    if len(word) > 1 and word[1] == 's':
        print word

或者你可以 - 比如@idjaw说 - 使用切片,然后如果超出范围我们将获得一个空字符串:

for word in st.split():
    if word[1:2] == 's':
        print word

如果你有一个字符串,你可以获得一个子字符串 st[i:j] st字符串,i第一个索引(包括)和{{ 1}}最后一个索引(不包括)。但是,如果索引超出范围,那不是问题:那么您将获得空字符串。因此,我们只需构建一个从j开始并以1结束的切片(包括此处)。如果不存在这样的索引,我们获得空字符串(这不等于1),否则我们获得一个只有一个字符的字符串:索引为1的字符串。

在这种情况下,您将检查更复杂的模式,您可以使用 正则表达式

's'

此处我们指定匹配字词边界import re rgx = re.compile(r'\b\ws\w*\b') rgx.findall('print only the words that sstart with an s in the sstatement')之间的任何内容,\b s序列为\w s,第二个字符为s

>>> rgx.findall('print only the words that sstart with an s in the sstatement')
['sstart', 'sstatement']