仅在 Lua 中使用正则表达式替换整个单词

Posted

技术标签:

【中文标题】仅在 Lua 中使用正则表达式替换整个单词【英文标题】:Substituting whole words only using Regex in Lua 【发布时间】:2021-08-08 01:08:13 【问题描述】:

我正在制作一个能正确识别用户性别的程序。所以它应该将he 的每个实例替换为she,反之亦然。

问题是这也将替换 he 内部单词,例如 themtheirhelp... 这就是我卡住的地方。

local str = "the he he's hell"

str = str:gsub("he", "she") --tried my best, not the correct solution!

print(str) --expecting "the she she's hell"

基本上将所有he替换为she

【问题讨论】:

【参考方案1】:

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

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

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

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

编辑:

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

不确定您一直在哪里寻找文档,但 Lua Manual 说:

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

...

如果 repl 是一个表,那么每次匹配都会查询该表,使用 第一次捕获作为键。

【讨论】:

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

以上是关于仅在 Lua 中使用正则表达式替换整个单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式仅在前面没有时替换

正则表达式仅用替换文件中的单词替换单词

使用 Vim 的正则表达式替换多个文件的单词在 sed 中无法按预期工作

正则表达式。匹配整个单词

正则表达式整个单词[重复]

在 Python 中使用正则表达式查找和替换文件中的单词列表