【问题标题】:How to find bytecodes of matches?如何找到匹配的字节码?
【发布时间】:2025-05-24 05:25:01
【问题描述】:

我确实有一个字节码字符串以及所有匹配的字节码中的开始和结束索引(来自文本编辑器)。

例如mystring:

a few names with accents are Emily Brontë, Noël Coward, Zoë Wanamaker

当我搜索包含 ë 的单词时,我会在我的文本编辑器中找到这些(字节码)索引:
matches = [[35, 43], [44, 49], [58, 62]]

现在我想使用 python p.e 在这些匹配项中进行搜索。查找字母o 的所有子字符串,并在mystring 中查找这些o 的新字节码。

newmatches = []
     for n in matches:
         for m in reg.finditer(str(mystring[n[0]:n[1]], 'utf-8')):
             newmatches.append([m.start(), m.end()])

在上面的例子中 start() 和 end() 不是字节码,也不是mystring 中的索引,而是子字符串中的索引。

我该如何解决这个问题?

【问题讨论】:

  • 当您说“...并在mystring 中找到这些o 的新字节码”时,您指的是新字节码的索引,对吗?
  • @Marathon55,是的,对不起,我没有说清楚
  • 您的字节数并不完全令人信服。介意将您的文本匹配表达式添加到您的问题中,以便我们复制您的结果吗?

标签: python regex python-3.x search


【解决方案1】:

获得matches 数组后,在mystring 上进行第二次搜索,找到o 的索引(我们称这个新数组为o_matches)。然后循环遍历o_matches 中的项目——如果该项目包含在matches 数组中的任何间隔中,则将其添加到newmatches,因为这意味着它是包含重音的单词的一部分.

【讨论】:

  • 谢谢 Marathon55,这是个好主意!但是我仍然有问题,我的文本编辑器在字节码(二进制)中给出索引,python(finditer())搜索字符串(不是二进制)。
  • 你能展示你用来获取matches数组的代码吗?
  • 很遗憾没有,因为代码在 vimscript(vim 编辑器)中。
  • 你是否也可以使用 vim 搜索 mystring 以查找字符 o 的索引,然后将两个数组(matcheso_matches)传递给 python 以执行逻辑?
  • 是的,我就是这么做的。它解决了我的问题。谢谢。
【解决方案2】:

要获取mystring 中的索引而不是子字符串中的索引,您需要将n[0] 的值添加到start() 和end()。

【讨论】:

  • 它不起作用,因为 finditer() 找不到字节码
最近更新 更多