【问题标题】:How to search for a substring in a string, but from a certain index onward如何在字符串中搜索子字符串,但从某个索引开始
【发布时间】:2022-01-20 14:54:00
【问题描述】:

我不是 python 专家,由于它与工作相关,我可能需要更改一些变量和信息。

所以我有一个来自 API 请求的长字符串,我在其中查找用户信息,并确保我只有用户信息,我将他们的 ID 与 .find(ID) 一起使用,这向我显示ID 在字符串中的索引(用户信息的中间)。在那之后我想要的是上去

string and search for the tag that starts the information 
`**<resource>** and down to the tag that end the information ****</resource>**.` 

**id_position = string.find(id)**
**upper = string[:id_position].rfind("<resource>")** to go in reverse order up the string and find the first match , and works fine

but when i use **lower = string[id_position].find("</resource>")**

,而不是正常地从 id 位置向下直到找到第一个匹配项,它实际上是在整个原始字符串中搜索,就像从第一个位置 string[0] 开始搜索一样。

当我打印时

**string[:id_position] + string[id_position:] == string** ,

它表明这是真的,所以我猜 find 功能并没有像我认为的那样帮助我。

所以我的问题是,如何在 id 的索引之后搜索我的特定子字符串?

我知道这很难理解,但我希望你们中的一些人能明白我的意思

供参考,数据如下所示

.<resource>
   name=
   ip=
.</resource>

.<resource>
   name2=
   ip2=
</resource>

.<resource>
   name=
   ip2=
.</resource>

【问题讨论】:

  • 这能回答你的问题吗? How do I get a substring of a string in Python?
  • 你试过使用str.findstart参数吗?
  • 请添加一个更完整的字符串示例,以便可以测试代码?此外,当您说“ID”时,您的意思是“名称”还是“IP”? “ip”/“name”和“ip2”/“name2”有区别吗?

标签: python string substring


【解决方案1】:

您是否尝试过使用find()s 可选参数startend

id_position = string.find(id)
upper = string.find("</resource>", id_position) + len("</resource>")
lower = string.rfind("<resource>", 0, id_position)

print(repr(string[lower:upper]))
> '<resource>\n   name2=\n   ip2=\n</resource>'

【讨论】:

  • 当我使用它们时,我得到“名称'开始'/'结束'未定义”
  • 我会使用评论部分来询问诸如此类的澄清问题。一旦您掌握了所有信息,您就可以创建一个很好的答案,解释为什么提出的解决方案有效或解决了这个特定问题。这将有助于其他人理解原因并从中学习。希望此反馈对您有所帮助:)
  • @MrBlaise 除了我自己的答案,我还没有足够的声誉发表评论^^。
  • @ValentinFlorea startend 未定义,因为它们仅声明为位置参数。所以string.find(id, start=id_position) 会失败,而string.find(id, id_position) 应该可以工作。
  • 感谢@felix.goroncy 的解释。像你解释的那样工作得很好,我还找到了一个更简单的例子:programiz.com/python-programming/methods/string/find 适合像我一样没有 Python 经验的人。
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多