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

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

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

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

点赞
用户734069
用户734069

string.find 返回 匹配的起始和结束位置。所以 _ 变量就是起始索引,你忽略了它。

你的问题是你的模式实际上没有匹配到你要找的内容。如果你想查找最后一个连续的"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
2018-09-17 15:27:26
用户88888888
用户88888888

有许多解决问题的方法。我喜欢使用 gmatch。 顺便说一句,你使用了 end 作为变量名。但这是一个保留关键字。

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