在字符串中查找单词的位置

10

我的任务

我正在尝试使用正则表达式查找出现在字符串中的单词位置。

代码

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
@RomanPerekhrest:这是一个修辞问题。Wiktor想要指出错误的方法。该字符串由字符而非单词组成。OP正在获取第一个字符出现的索引。 - cezar
仅凭正则表达式就能实现这个吗?我觉得不行。 - moritzg
重复的问题,链接:https://dev59.com/DXVC5IYBdhLWcg3w0EoD#12054409 - Wiktor Stribiżew
r'[\s]*(jake)[\s]*'已经是更好的正则表达式了,但我认为仅使用正则表达式是不可能实现的。 - Ludisposed
2个回答

10

要获取输入字符串中搜索字符串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 - 如果一个单词等于搜索字符串


我写的差不多一样,但你更快。简单易行的解决方案,而且没有使用正则表达式。 - cezar
他是问是否使用正则表达式,对吗? - bharadhwaj
@cezar,是的,在这种情况下不需要正则表达式和导入re。 - RomanPerekhrest

4

尝试这种方法:

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]

你晚了12秒钟。 - RomanPerekhrest
我比那还要晚,所以放弃了我的答案。但是你知道写一个答案需要超过12秒的时间。速度很重要,但准确性更为重要。 - cezar
@RomanPerekhrest 我们在同一时间空间 :) - Tiny.D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接