3

我知道我应该使用它string.match()来执行此操作,但我无法匹配字符串中“可能”的字符,例如:

teststring = "right_RT_12" 

我可以轻松地执行以下操作:

string.match(teststring , 'righteye_RT_[0-9]+')

如果测试字符串的末尾总是有“_[0-9]+”,这很好,但可能存在末尾没有数字的情况。我将如何在 Lua 中解决这个问题?

在 Python 中,我可以执行以下操作:

re.search("righteye_RT(_[0-9]+)?", teststring)

我认为这样的事情会起作用:

string.match(teststring, 'righteye_RT_?[0-9]+?')

但它没有。结果=nil

但是,以下确实有效,但只能找到第一个数字:

string.match(teststring, 'righteye_RT_?[0-9]?')
4

2 回答 2

3

?只能用于 Lua 模式中的一个字符。您可以使用or来匹配两种模式:

local result  = string.match(teststring , 'righteye_RT_%d+') 
             or string.match(teststring , 'righteye_RT')

注意or操作符是短路的。所以它首先尝试匹配第一个模式,当且仅当它失败(返回nil)时,它才会尝试匹配第二个模式。

于 2014-04-09T13:27:33.143 回答
1

尝试这个:

string.match(teststring, 'righteye_RT_?%d*$')

注意字符串的结尾 anchor $。没有它,%d*将匹配空字符串,因此整个模式将匹配righteye_RT_junk.

于 2014-04-09T13:09:55.727 回答