Lua中的模式匹配在文本块的开始和结束时剪切单词

时间:2016-12-05 12:45:02

标签: arrays string lua pattern-matching

我的目标是找到类似于下面的模式,

  space channel space

我想在文本块(页面')开始和结束时剪掉。

我在Lua中编写了以下代码。我的下面的代码只能使用1个字母的模式。

我应该如何使其适用于具有空格字空间模式的任何单词,该模式应该剪掉目前存在的数组索引值     页面的开头和结尾?



singleChar = ' and third party cookies (such as the DoubleClick cookie) together to (a) inform, optimize and serve ads based on a users past visits to '

totaLen = string.len(singleChar)

totalen = -totaLen

print('actual singleChar - '..singleChar)

singleCharChecking = string.sub(singleChar,-2,-1)

print ('singleCharChecking - '..singleCharChecking)

checkPattern = string.gmatch(singleCharChecking,"%s%a")

for word in checkPattern do
	checkPatternLen = string.len(word)
	print(checkPatternLen)
	if (checkPatternLen == 2) then
		singleChar = string.sub(singleChar,totalen,-2)
		print('single char - '..singleChar)
	end
end




输入: singleChar ='和第三方Cookie(例如DoubleClick Cookie)一起(a)根据用户过去访问的信息通知,优化和投放广告

预期输出 第三方Cookie(例如DoubleClick Cookie)一起(a)根据用户过去的访问情况通知,优化和投放广告

1 个答案:

答案 0 :(得分:1)

场景1:应该剥离开始或结束模式

或者,您可以将其拆分为2个gsub操作,使其稍微复杂一点:

local s = string.gsub(" and some text channel ", "^%s+%S+%s+", "")
s = s:gsub("%s+%S+%s*$", "")

第一行将删除最初的1+空格,1 +非空格,1 +空格,第二行将在字符串末尾指定相同的模式。

场景2:如果开始和结束模式必须都退出

由于您要从字符串中删除第一个和最后一个非空白块,您可以使用

string.gsub(" and some text channel ", "^%s+%S+%s+(.*%S)%s+%S+%s+$", "%1")

请参阅online Lua demo

<强>详情:

  • ^ - 字符串开头
  • %s+ - 1+空格
  • %S+ - 1 +非空格
  • %s+ - 1+空格
  • (.*%S) - 第1组贪婪地捕获任何0+字符到最后一个非空格字符后跟
  • %s+%S+%s*$ - 字符串末尾的1+个空格(%s+),1个非空格(%S+)和0个空格(%s*$)。

替换部件中的%1会将第1组内容重新插入结果中。