2016-09-19 54 views
2

我正在使用Google Sheets文檔,在該文檔中需要處理字符串並提取其中的某些部分。這些字符串具有以下形式:如何搭配某物「之前/之後」是否有正則表達式?

廣告名稱:FOO_FOOBAR_DE_CH_Zagreb + N1_970x250.zip; 970x250的

我需要提取兩個 「場」:

  • 薩格勒布
  • 的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錯誤。我覺得這兩個寶貴的資源,學習正則表達式:

但由於我時間不夠,我不能詳細地現在研究這個。

+0

僅供參考:我認爲您需要使用REGEXEXTRACT實際返回*文本*,而不僅僅是TRUE或FALSE。 –

+0

對不起,我在我的Q中拼錯了它,我用REGEXEXTRACT。謝謝:) –

+1

所以,你需要'REGEXEXTRACT's,對吧?對於Zagreb - '= REGEXEXTRACT(F15,「_([a-zA-Z] +)\ +」)'和分辨率,嘗試'= REGEXEXTRACT(F15,「; \ s *([0-9x] + )$「)' –

回答

2

在Google Speadsheets中,您可以使用捕獲組圍繞您需要從特定上下文中提取的文本。因此,只需將()放在這些圖案部分的周圍。

要獲得Zagreb,請使用=REGEXEXTRACT(F15,"_([a-zA-Z]+)\+")並獲得分辨率,請使用=REGEXEXTRACT(F15,";\s*([0-9x]+)$")

模式1

  • _ - 這只是匹配
  • ([a-zA-Z]+)下劃線 - 捕獲組1匹配的一個或多個ASCII字母
  • \+ - 字面+

模式2

  • ;\s* - 一個;和0+空格
  • ([0-9x]+) - 捕獲組1匹配的一個或多個數字或x
  • $ - 在小區的端部內容。

在這兩種情況下,你只能得到子捕獲到1組

enter image description here

更多有關capturing groups can be found here

相關問題