【问题标题】:Return position if match is found如果找到匹配则返回位置
【发布时间】:2021-04-04 05:07:26
【问题描述】:

我正在处理一些在整个代码中具有相似匹配的二进制数据。例如,“a6636f6f726473”就是其中之一。现在我想对第一个匹配项、字母 a 和我还不知道的数字进行反向搜索,并返回文件中所有找到的匹配项的位置。

示例:在字符串a7a36d617815a7536b697070657284a6636f6f72647383 中,我希望它找到a7536b697070657284a6636f6f72647383 并返回位置12。唯一唯一的字符串是a6636f6f72647383,并且想要对它找到的第一个字符a 进行反向搜索,这给了我a7536b697070657284a6636f6f72647383,然后我想找出a7 的位置。

希望这有任何意义,有人可以推动我进入有关如何在 Python 中解析它的正确方向。

-J

【问题讨论】:

  • re.finditer() 可能会帮助您找到所有匹配项,如果您想要多个匹配项:stackoverflow.com/questions/3519565/…
  • str.find 也有帮助!
  • @GreenCloakGuy 这可能有用,但我的正则表达式并不强。 (?<=a[0-9])(.*?)(?=a6636f6f726473) 我只需要找到它在a6636f6f726473 的反向匹配中遇到的第一个a。因为在aa6636f6f726473 之间,它是一个随机的十六进制值。

标签: python-3.x string-parsing


【解决方案1】:

感谢 Green Cloak Guy 将我推向正确的方向。我已经解决了我的问题,如果有人遇到同样的问题,我会分享我的发现并与社区分享。

普通的python re不支持reverse flag。我找到了一个名为 regex 的最新 python 模块。你可以在https://pypi.org/project/regex/找到它

a = [m.start(0) for m in regex.finditer(r'(?r)(?:a).*?(?=a6636f6f726473)', "a7a36d617815a7536b697070657284a6636f6f72647383")]

print(a)

现在返回位置 12

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多