我想使用正则表达式(在Excel中使用MUREFUNC)从字符串中获取单个TAG(示例TAG3)
我的字符串类似于
";tag1; tag2;,, ; tag3;tag4..."
其中“;”和“,”是我的分隔符,空格没有被修剪
如果我想知道是否存在“tag3”,请检查此RE:
(?i)(?<=[;,]\s*)(tag3)(?=[;,])
但不起作用。 如果我删除星号(*),只有当所有标签都使用“;”或“,”作为分隔符编写时,它才有效 你能解释一下为什么我的RE不起作用吗?
答案 0 :(得分:0)
问题是Excel正则表达式不支持可变长度的lookbehinds。大多数所有正则表达式都没有。 (这意味着你的lookbehind断言中不能有量词*
。)
只需移除量化器*
,如下所示:
(?i)(?<=[;,]\s)(tag3)(?=[;,])
它有效。或者更好的是,将\s
设为OR条件|
,如下所示:
(?i)(?<=[;,]|\s)(tag3)(?=[;,])
答案 1 :(得分:0)
VBscript(Excel)根本不支持lookbehind。
我建议:
[;,]\s*tag3\s*[;,]
因此,要判断tag3是否存在,您可以使用正则表达式对象的Test方法,如此代码段所示。
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Pattern = "[;,]\s*tag3\s*[;,]"
FoundMatch = myRegExp.Test(SubjectString)
哎呀,刚才注意到你正在使用MoreFunc。
尝试:
=REGEX.COMP(A1,"[;,]\s*tag3\s*[;,]",FALSE)
(已编辑为函数添加不区分大小写的选项