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

Lua字符串操作(查找前后的单词),lua,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 hell

我是这个论坛的新手。我在操作正确的字符串以实现此目的时遇到问题

基本上,我要做的是接收一个输入字符串,如以下示例所示:

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 bye to”等等。但是,相反,它会在等号之前拾取单词,在等号之后拾取单词。我甚至尝试了*量词,它做了同样的事情。 我也尝试过这种模式

[%w%s]*=[%w%s]
我只是希望能够将这个字符串排序到一个键值表中,其中键是each=之前的所有单词,值是该相等之后逗号之前的所有单词。
有人有什么建议吗?

您可以使用以下内容:

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*”
表示以下内容:除
=
[^=]
)之外的任何内容重复一次或多次(
+
),然后是除“,”之外的任何内容,然后是逗号和可选空格(以避免在下一个问题中包含它们)。我还在字符串中添加了逗号,因此它也会解析最后一对

为了在注释中进一步阐述每个请求:
[^=]+
表达式中,
[=]
用一个允许的字符(
=
)指定一个集合,而
[^=]
否定该字符,因此它是一个包含除
=
+
允许该集合重复1次或多次以外的任何字符的集合


正如@lhf所建议的,您可以使用一个更简单的表达式:
(.-)=(.-),%s*
,这意味着:在第一个
=
-
使匹配成为非贪婪的)之前获取所有字符,然后在第一个

模式
“(.-)=(*“
更简单。谢谢Paul,这个模式确实有效。尽管你对你在集合中添加的锚还是有点困惑。介意再详细一点吗?更新答案以进一步详细说明。@PaulKulchenko谢谢。我现在更明白了!您尝试的第二个方法只是在末尾缺少一个加号,以匹配多个字符。除此之外,您的示例不会运行(例如,no DO after FOR、gmatch in pairs、str和s),因此,如果您的示例运行正常,那么它就不是您在此处发布的方式。这应该是可行的:
s='Say hello to=Stack overflow,Say bye to=other resources'对于问题,在s:gmatch中回答“([%w%s]+)=([%w%s]+)”do print(question,answer)end
Oops,我在编辑器中打出来了。虽然我在使用的控制台中有do。