【问题标题】:Python regex: looking for a regex match close to a starting pointPython 正则表达式:寻找接近起点的正则表达式匹配
【发布时间】:2022-11-22 04:32:53
【问题描述】:

我想知道是否有可能在接近起点的地方寻找正则表达式匹配。起点和比赛之间的距离是一个初始参数。

想象一下这种情况。

我有一个输入文本、一个起点和一个像这样的正则表达式:

str_text = f" bla bla bla bla 12 bla blablabla@bla.com bla bla bla "

str_starting_point = "12"
str_regex = "[a-z0-9]\\S{0,64}[a-z0-9]@[a-z0-9\\-\\.]{0,252}[a-z0-9]\\.[a-z]{2,10}|[a-z0-9]@[a-z0-9\\-\\.]{0,252}[a-z0-9]\\.[a-z]{2,10}"

re.findall(str_regex, str_text)
['blablabla@bla.com']

现在我正在尝试搜索接近起点的正则表达式匹配项。 我正在尝试使用上面的正则表达式,但它不起作用:

inf_lim = 0
sup_lim = 2
str_regex_composed = f" {str_starting_point} " + r"(\w+\s){" + f"{inf_lim},{sup_lim}" + "}" + f"{str_regex} "
re.findall(str_regex_composed, str_text)


Desired output: "blablabla@bla.com" or ""

您有解决方案或建议吗? 谢谢

【问题讨论】:

  • 因此,您不想要第一个或所有匹配项,而是想要更接近字符串特定索引的匹配项?
  • 您是否考虑过从起点搜索字符串而不是修改正则表达式?

标签: python regex string


【解决方案1】:

一种方法是使用 finditer 方法并使用 match objects 的 api 手动计算哪些匹配项最接近,特别是针对您的问题,start 似乎就是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多