2017-05-22 55 views
1

我的任务查找字符串中的单词的位置

我试图使用正则表达式

代码找到出现在串词的位置

import re 

# A random string 

mystr = "there not what is jake can do for you ask what you play do for spare jake".upper() 

match = re.search(r"[^a-zA-Z](jake)[^a-zA-Z]", mystr) 

print match.start(1) 

输出

18 

预计输出

我希望我的输出包含字符串jake的位置:

5, 17 

编辑: 要澄清,我试图识别单词的位置。我相信我做的是找到索引和我不能确定如何使我想到

+2

@WiktorStribiżew,他要字位置,而不是字符 – RomanPerekhrest

+0

@RomanPerekhrest:这是一个修辞问题。 Wiktor想要指出错误的方法。该字符串由字符组成,而不是由字符组成。 OP正在获取第一个字符发生的索引。 – cezar

+0

这只是正则表达式可能吗?我不这么认为。 – moritzg

回答

4

要获得输入字符串的“序”搜索字符串jake的位置用下面的办法它的工作:

mystr = "there not what is jake can do for you ask what you play do for spare jake" 
search_str = 'jake' 

result = [i+1 for i,w in enumerate(mystr.split()) if w.lower() == search_str] 
print(result) 

输出:

[5, 17] 

  • enumerate(mystr.split()) - 让枚举对象(项目配对与它们的位置/索引)

  • w.lower() == search_str - 如果一个词等于搜索字符串

+0

我写得差不多,但速度更快。简单而简单的解决方案,无需使用RegEx。 – cezar

+0

他问使用正则表达式,对吧? – bharadhwaj

+0

@cezar,是的,没有必要在这种情况下正则表达式和进口 – RomanPerekhrest

2

试试这个方法:

mystr = "there not what is jake can do for you ask what you play do for spare jake" 
result = [index+1 for index,word in enumerate(mystr.split()) if word=='jake'] 
result 

输出:

[5, 17] 
+0

你是12秒后 – RomanPerekhrest

+0

而我比这更晚,所以放弃了我的答案。但是你知道,写出答案需要12秒多的时间。速度很好,但准确性更重要。 – cezar

+0

@RomanPerekhrest我们在同一时间空间:) –