我希望能够检查字符串中的第一个子字符串:random_string = "fox is bright orange"
,而不需要拆分字符串然后从列表中读取,或者将其存储在其他变量中。是否有可能做到这一点?
我在这里使用的字符串只是一个例子,因此没有使用指定的字符串。我希望能够找出任何字符串的子字符串(如果它被' '
拆分),而不必使用列表
答案 0 :(得分:4)
所以你想从fox
获得fox is bright orange
:
正则表达式; ^\w+
从一开始就获得一个或多个字母数字:
In [61]: re.search(r'^\w+', random_string).group()
Out[61]: 'fox'
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__, ' '))
无论你的字符串中是否有' '
,都会有效。