作为计数的一部分,我试图搜索可能包含{}
的单元格内容。还需要将其限制为该范围内的精确匹配。因此,我的第一个直觉是选择regexmatch
,但是我遇到了{}
成为正则表达式的一部分的问题。我基本上需要一种从单元格转义整个字符串的方法。这是我一直在尝试的示例:
REGEXMATCH(A2,"(?:^|\s)("&A1&")(?:\s)")
因此,假设A1
是blue{car}
,而A2是like a blue{car}
,这应该匹配。但是,由于尝试使用#REF!
作为量词,因此我得到一个{}
错误。我知道您可以在预定的字符串中转义字符,但是由于A1实际上可以是任何我需要的通用方法。用\Q…\E
包裹着"&A1&"
似乎是完美的选择,但不幸的是,它在工作表中没有得到支持。
对此表示感谢,将提供任何帮助!
答案 0 :(得分:1)
基于What special characters must be escaped in regular expressions?和RE2 reference,您可以轻松地编写一个函数来转义必须在正则表达式模式中视为文字字符的所有特殊字符:
=REGEXREPLACE(A1, "[.^$*+?()[{\\|]", "\\$0")
对于{car}
,它将产生\{car}
,并且仅匹配{car}
。请注意,RE2正则表达式引擎足够聪明,可以将{car}
中的括号解析为文字括号。如果括号之间的内容是数字的并且位于不可量化的模式之后(例如,在字符串的开头或在替换运算符之后),则出现一个非转义的{
问题。
正则表达式中还有另一个问题:您需要在{car}
之前使用空格或字符串开头,在{car}
之后需要一个空格,但是blue{car}
的两端都没有空格,并且不是在字符串的开头。请重新考虑您的要求并相应地修改模式。