String 字符串中可能包含的字符的模式
我知道我应该使用String 字符串中可能包含的字符的模式,string,lua,lua-patterns,String,Lua,Lua Patterns,我知道我应该使用string.match()来执行此操作,但我在匹配字符串中“可能”的字符时遇到了问题,例如: teststring = "right_RT_12" 我可以很容易地做一些事情,比如: string.match(teststring , 'righteye_RT_[0-9]+') re.search("righteye_RT(_[0-9]+)?", teststring) 如果测试字符串的末尾总是有“[0-9]+,这是可以的,但是可能有一个例子,在末尾没有数字。在Lua中,
string.match()
来执行此操作,但我在匹配字符串中“可能”的字符时遇到了问题,例如:
teststring = "right_RT_12"
我可以很容易地做一些事情,比如:
string.match(teststring , 'righteye_RT_[0-9]+')
re.search("righteye_RT(_[0-9]+)?", teststring)
如果测试字符串的末尾总是有“[0-9]+,这是可以的,但是可能有一个例子,在末尾没有数字。在Lua中,我将如何处理这个问题
在Python中,我可以执行以下操作:
string.match(teststring , 'righteye_RT_[0-9]+')
re.search("righteye_RT(_[0-9]+)?", teststring)
我认为这样做会奏效:
string.match(teststring, 'righteye_RT_?[0-9]+?')
但事实并非如此。结果=nil
但是,以下方法确实有效,但只找到第一个数字:
string.match(teststring, 'righteye_RT_?[0-9]?')
试试这个:
string.match(teststring, 'righteye_RT_?%d*$')
请注意字符串锚点的结尾
$
。如果没有它,%d*
将匹配空字符串,因此整个模式将匹配类似右眼垃圾
??
只能用于Lua模式中的一个字符。您可以使用或来匹配两个模式:
local result = string.match(teststring , 'righteye_RT_%d+')
or string.match(teststring , 'righteye_RT')
请注意,或
运算符短路。因此,当且仅当它失败时,它会首先尝试匹配第一个模式(返回nil
),它将尝试匹配第二个模式。这很有效,谢谢!但是为什么这个有效,而%d+?不起作用?我以为$只搜索字符串末尾的字符?%d+
不起作用,因为它至少需要一个数字。我知道,所以%d*也可以,但是?作为%d*扔掉了?仍然不起作用。@iGwok Bu不要太在意。那个模式匹配righteye\u RT\u
string,这可能不合适。它确实匹配“righteye\u RT”,但也匹配“righteye\u RT”,因为?我喜欢这样。难道不可能像python的正则表达式那样在一行中做到这一点:“(righteye\u RT%d+;righteye\u RT)“@iGwok Lua模式不支持|
,所以不,至少不是这样。