Lua中只替换整个单词的正则表达式

我正在制作一个能正确称呼用户性别的程序。所以它应该把每个he都替换为she或者反过来。

问题是,这个操作也会替换themtheirhelp等单词中的he……这就是我卡住的地方。

local str = "the he he's hell"

str = str:gsub("he", "she") --我尽力了,但不是正确的解决方案!

print(str) --期望输出 "the she she's hell"

基本上把所有的he都替换成了she

点赞
用户2858170
用户2858170

一种可行的双向解决方案:

str = str:gsub("%a+", {he = "she", she = "he"})

%a+ 匹配一个或更多的字母,基本上是单词。匹配将被替换为相应的表条目或保持不变。

还有其他的方法可以做到这一点,但这可能是实现双向方案最短的方法。

编辑:

关于第二个参数。我找不到任何文档。 你有吗?

不确定你在哪里查找文档,但Lua手册说:

string.gsub (s, pattern, repl [, n])

...

如果 repl 是一个表,那么对于每个匹配,将查询该表,并使用第一个捕获作为键。

2021-05-18 18:51:57