使用正则表达式替换一个字符串

我需要帮助使用Lua和正则表达式解决以下问题。我有很多以下格式的字符串:

"|keynameN=value"

竖杠( |)和“keyname”之间可能包含多个空格。同样,keyname和等号( =)之间可能包含多个空格。

  1. "|house10=true"
  2. "|car11 = house"
  3. "| name = car"
  4. "| wow15 = cat"

我需要使用string.gsub()函数传递动态替换每个键的名称(house10car11namewow15),保留其后缀数字,而不更改字符串的格式(例如保留空格)的正则表达式。我已经尝试了许多组合,但没有成功。

点赞
用户4301306
用户4301306

我建议使用以下代码:

new_string = string.gsub(old_string, "^(| *)[A-Za-z]+", "%1prefix", 1)

其中 "%1prefix" 中的 prefix 是你想要替换键的第一部分的内容。最后的 , 1 不是必须的,因为 ^ 将模式锚定在行首,但它可能使 gsub 的工作量更少。

基本的技巧是从输入字符串中捕获 | 和后面的空格,并在替换中使用它们(用 %1)。

根据键所允许的具体形式,允许字符集 [A-Za-z] 可能需要调整(例如,如果键可以包含下划线,则可以使用 [A-Za-z_])。野蛮的方法是使用 [^0-9 =](即除数字、空格和 = 之外的任何字符),但我不确定我是否建议这么做。

顺便提一下,Lua 的 模式 不是正则表达式(并且相对不太强大)。

2015-03-24 10:43:08
用户3735873
用户3735873

一个可能的解决方案(请参见下面示例中的函数“我的”):

t = {
    {" | house10 = true "'住所'},
    {" | car11 = house "'汽车'},
    {" | name = car "'标签'},
    {" | wow15 = cat "'owo'},
}

function my(s,myown)
  s = s:gsub('(|%s *)(%a +)(%d *%s * = %s *%a +)''%1'..myown .. '%3')
  返回s
end

for _, v in ipairs(t)do
  打印my(v [1],v [2])
end
2015-03-24 14:31:16