在字符串中查找匹配项的开始和结束位置
Find start and end position of a match in a string
我一直在尝试为 lua 中的以下问题找到简单的解决方案:
给定一个字符串,例如 str
,获取最后出现的 A-mer(A
的一个或多个实例)的开始和结束位置。例如。对于字符串 str = "123A56AA9"
,解决方案是 start=7
、finish=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
我一直在尝试为 lua 中的以下问题找到简单的解决方案:
给定一个字符串,例如 str
,获取最后出现的 A-mer(A
的一个或多个实例)的开始和结束位置。例如。对于字符串 str = "123A56AA9"
,解决方案是 start=7
、finish=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