【问题标题】:Finding the position of words in a string [duplicate]查找字符串中单词的位置[重复]
【发布时间】:2017-10-21 21:28:38
【问题描述】:

我的任务

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

代码

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

编辑: 为了澄清,我试图确定单词的位置。我相信我所做的是找到索引并且不确定如何让它按我的预期工作

【问题讨论】:

  • @WiktorStribiżew,他想要词的位置,而不是字符
  • @RomanPerekhrest:这是一个反问。 Wiktor 想指出错误的方法。字符串由字符组成,而不是由单词组成。 OP 正在获取第一个字符出现的索引。
  • 仅使用正则表达式是否可行?我不这么认为。
  • r'[\s]*(jake)[\s]*' 已经是一个更好的正则表达式,但我认为仅使用正则表达式是不可能的

标签: python regex python-2.7 search


【解决方案1】:

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

【讨论】:

  • 我写的差不多,但你更快。无需使用 RegEx 即可轻松简单的解决方案。
  • 他问的是用正则表达式,对吧?
  • @cezar,是的,在这种情况下不需要正则表达式并重新导入
【解决方案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]

【讨论】:

  • 你晚了 12 秒
  • 而且我比这更晚,所以放弃了我的答案。但是你知道写一个答案需要超过 12 秒。速度不错,但准确性更重要。
  • @RomanPerekhrest 我们在同一个时空:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多