我正在使用Google表格文档,其中我需要操纵字符串并提取它们的某些部分。这些字符串与字符具有以下形式:
广告名称:FOO_FOOBAR_DE_CH_Zagreb + N1_970x250.zip; 970x250的
我需要提取两个"字段":
显然,第一个总是被"\_"
和"+"
包围,这使得事情变得更容易,另一个被"_"
和"."
包围或者先于如果我要从字符串的末尾捕获它,请"; "
。
我正在尝试使用Google表格专有REGEXMATCH
公式(read more about it here),但我必须做错事。如果重要,Google产品会使用 RE2 RegEx" flavor"。
这是我到目前为止所做的:
=REGEXEXTRACT(text, "(?:_)[A-Za-z]+(?:\+).*")
这个回归:
_Zagreb +
所以我需要失去" _"和" +"。我明白,对于这种类型的操作(在某些字符之间提取文本),应该使用环视,但我仍然不熟悉这些。此外,据我所知,其中一些(最值得注意的是负面观察)不适用于JavaScript。
这是尝试2:
=REGEXEXTRACT(text, ".*[A-Za-z]+(?=\+.*)")
这个只会引发#REF
错误。我发现这两个资源对于学习RegEx非常宝贵:
但由于时间不够,我现在无法详细研究这个问题。
答案 0 :(得分:2)
在Google Speadsheets中,您可以在需要从特定上下文中提取的文本周围使用捕获组。因此,只需将(
和)
放在这些模式部分周围。
要获取Zagreb
,请使用=REGEXEXTRACT(F15,"_([a-zA-Z]+)\+")
并获取解决方案,请使用=REGEXEXTRACT(F15,";\s*([0-9x]+)$")
。
模式1 :
_
- 刚刚匹配的下划线([a-zA-Z]+)
- 捕获与一个或多个ASCII字母匹配的组1 \+
- 文字+
。模式2
;\s*
- ;
和0+空格([0-9x]+)
- 捕获与一个或多个数字匹配的组1或x
$
- 在单元格内容的末尾。在这两种情况下,您只能获取捕获到第1组的子字符串。