在字符串中查找匹配项的开始和结束位置

Find start and end position of a match in a string

我一直在尝试为 lua 中的以下问题找到简单的解决方案: 给定一个字符串,例如 str,获取最后出现的 A-mer(A 的一个或多个实例)的开始和结束位置。例如。对于字符串 str = "123A56AA9",解决方案是 start=7finish=8

要获得结束位置,我可以使用: _,finish = str:find(".*A")` -- returns 8

但我找不到任何解决方案来获得起始位置。这可能吗? 谢谢!

string.find returns 匹配的开始和结束位置。因此起始索引是您忽略的 _ 变量。

您的问题是您的模式实际上与您正在寻找的不匹配。如果你想要最后一个 "A" 字符序列,你需要做一些其他的事情。像这样:

local start, final = 1, 1

while(final)
  local temp_start, temp_final = str:find("A+", end)
  if(temp_start) then
    start, final = temp_start, temp_final
  else
    final = nil
  end
end

一个更聪明的基于模式的方法是这样的:

local start, final, match = str:find("(A+)[^A]*$")
if(start) then
  final = start + (#match - 1)
end

解决问题的方法有很多种。我喜欢使用 gmatch。 顺便提一句。您已使用 end 作为变量名。但这是保留关键字。

str = "123A56AA9"
for startpos, match, endpos in str:gmatch('()(A+)()[^A]*$') do
    print(startpos, match, endpos-1)
end