【发布时间】:2016-09-19 11:52:03
【问题描述】:
我正在处理一个 Google 表格文档,我需要在其中操作字符串并提取其中的某些部分。这些字符串对字符具有以下形式:
广告名称:FOO_FOOBAR_DE_CH_Zagreb+N1_970x250.zip; 970x250
我需要提取两个“字段”:
- 萨格勒布
- 970x250
显然,第一个总是被 "\_" 和 "+" 包围,这让事情变得更容易一些,另一个被 "_" 和 "." 包围,或者如果我要在前面加上 "; "从字符串的末尾捕获它。
我正在尝试使用 Google 表格专有的 REGEXMATCH 公式 (read more about it here),但我一定是做错了什么。如果重要,Google 产品会使用 RE2 RegEx“风味”。
这是我目前所拥有的:
=REGEXEXTRACT(text, "(?:_)[A-Za-z]+(?:\+).*")
这个返回:
_萨格勒布+
所以我需要去掉“_”和“+”。我知道对于这种类型的操作(在某些字符之间提取文本)应该使用环视,但我仍然对这些很不熟悉。另外,我知道其中一些(最明显的是负面的后视)不适用于 JavaScript。
这是尝试 2:
=REGEXEXTRACT(text, ".*[A-Za-z]+(?=\+.*)")
这个只是抛出一个#REF 错误。我发现这两个资源对于学习 RegEx 非常宝贵:
但由于时间紧迫,我现在没能力详细研究这个。
【问题讨论】:
-
仅供参考:我认为您需要使用
REGEXEXTRACT来实际返回 文本,而不仅仅是 TRUE 或 FALSE。 -
抱歉,我在 Q 中拼错了,我正在使用 REGEXEXTRACT。谢谢:)
-
所以,你需要
REGEXEXTRACTs,对吧?对于萨格勒布 -=REGEXEXTRACT(F15,"_([a-zA-Z]+)\+")和分辨率,请尝试=REGEXEXTRACT(F15,";\s*([0-9x]+)$") -
宾果游戏!这就对了。所以我实际上不需要使用LOOKAROUNDs?能不能这么简单,我简单的把我要抓的东西放在一个()里面,需要在抓包组前面或者后面放什么?
-
是的,基本上就是这样。对于此类基本提取,可以利用捕获功能。仅当您必须限制更通用的模式或需要重叠匹配时,才需要前瞻。
标签: javascript regex google-sheets