使用excel RE中的星星前瞻

时间:2014-02-06 15:18:18

标签: regex excel

我想使用正则表达式(在Excel中使用MUREFUNC)从字符串中获取单个TAG(示例TAG3)

我的字符串类似于

";tag1;  tag2;,,  ; tag3;tag4..." 

其中“;”和“,”是我的分隔符,空格没有被修剪

如果我想知道是否存在“tag3”,请检查此RE:

(?i)(?<=[;,]\s*)(tag3)(?=[;,])

但不起作用。 如果我删除星号(*),只有当所有标签都使用“;”或“,”作为分隔符编写时,它才有效 你能解释一下为什么我的RE不起作用吗?

2 个答案:

答案 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)

(已编辑为函数添加不区分大小写的选项