是否可以使用子字符串而不必将它们存储在单独的变量中

时间:2018-02-21 23:47:35

标签: python string

我希望能够检查字符串中的第一个子字符串:random_string = "fox is bright orange",而不需要拆分字符串然后从列表中读取,或者将其存储在其他变量中。是否有可能做到这一点?

我在这里使用的字符串只是一个例子,因此没有使用指定的字符串。我希望能够找出任何字符串的子字符串(如果它被' '拆分),而不必使用列表

6 个答案:

答案 0 :(得分:4)

所以你想从fox获得fox is bright orange

  1. 正则表达式; ^\w+从一开始就获得一个或多个字母数字:

    In [61]: re.search(r'^\w+', random_string).group()
    Out[61]: 'fox'
    
  2. str.partition(生成元组)并获取第一个元素

    In [62]: random_string.partition(' ')[0]
    Out[62]: 'fox'
    

答案 1 :(得分:1)

在Python中执行所需操作的正确方法正是您要避免的。没有真正的理由这样做。

但是......如果你绝对想避免使用列表,你可以这样做。

sub_string = random_string[:random_string.index(' ')]

请注意,如果字符串中没有空格,则会引发异常。

答案 2 :(得分:1)

您想检查给定字符串是否以某个单词开头?

random_string = "fox is bright orange"
print(random_string.startswith("fox ")   # True

你想得到第一个单词的长度吗?

random_string = "fox is bright orange"
print(random_string.index(" "))           # 3

你想获得第一个单词,但不能分割其他任何内容吗?

random_string = "fox is bright orange"
print(random_string[:random_string.index(" ")])    # fox

注意str.index()在找不到指定的子字符串时引发ValueError,即字符串中只有一个单词,所以如果你使用最后两个解中的一个,你应该抓住它错误并做适当的事情(例如使用整个字符串)。

random_string = "fox is bright orange"
try:
    print(random_string[:random_string.index(" ")])
except ValueError:
    print(random_string)

或者您可以使用str.find()代替。如果找不到子字符串,则返回-1,您必须稍微处理一下。

答案 3 :(得分:0)

您可以使用切片:

In [1]: s = "fox is bright orange"

In [2]: s[4:7]
Out[2]: 'is '

In [3]: s[4:13]
Out[3]: 'is bright'

In [4]: s[4:]
Out[4]: 'is bright orange'

In [6]: s[:6]
Out[6]: 'fox is'

在较低级别的语言(如C)中,你可以在原始字符串上有指针,其中包含任意的错误。因此,您可以使用切片复制此行为。但是请注意,python总是会返回一个副本,因为python字符串是不可变的。

答案 4 :(得分:0)

如果您不想使用re,那么对random_string进行简单迭代怎么办?

def get_first_word(long_string):
    offset = 0
    while long_string[offset] !=" ":
        offset+=1

    return long_string[0:offset]

所以运行此代码:

random_string = "fox is bright orange"
print(get_first_word(random_string))

将打印 - fox

答案 5 :(得分:0)

''.join(iter(iter(s).__next__, ' '))
无论你的字符串中是否有' '

都会有效。