Lua 字符串操作 (查找等号前后的单词)

我是这个论坛上相对较新的成员。我在操作正确的字符串上遇到了麻烦。

基本上,我正在尝试接收像这个示例一样的输入字符串:

str = "Say hello to=Stack overflow, Say goodbye to=other resources"

for question, answer in pairs(string.gmatch(s, "(%w+)=(%w+)"))
  print(question, answer)
end

我想让它返回:question = "Say hello to",answer = "Stack overflow",question = "Say goodbye to" 等等。但是现在它只能捕捉等号之前和之后的单词。我甚至尝试过 * 量词符号,它的行为也是完全一样。 我也尝试过这个模式

[%w%s]*=[%w%s]

我只是想将这个字符串按键值对表格的形式排序,其中键是每个等号之前的单词,值是在逗号之前等于符号之后的所有单词。 有人有建议吗?

点赞
用户1442917
用户1442917

你可以使用以下代码:

local str = "Say hello to=Stack overflow, Say goodbye to=other resources"
for question, answer in string.gmatch(str..",", "([^=]+)=([^,]+),%s*") do
  print(question, answer)
end

"([^=]+)=([^,]+),%s*" 的意思是:匹配任何字符,直到遇到 =[^=]),至少重复一次(+),紧接着是等号后面任何字符除了逗号,后面跟上逗号和可选空格(为避免在下一个问题中包含它们)。我还添加了逗号到字符串中,以便解析最后一对。

根据评论的要求,进一步解释:在表达式 [^=]+ 中,[=] 表示一个允许的字符集(=),[^=] 取反,表示除了等号外允许任何字符,而 + 使该字符集必须至少重复一次。

如@lhf所建议的那样,你可以使用更简单的表达式:(.-)=(.-),%s*,其意思是:匹配所有字符,直到第一个等号(- 可以匹配非贪心)然后一直匹配直至第一个逗号。

2017-04-18 02:51:03