2017-08-02 53 views
1

使用谷歌RE2 https://github.com/google/re2/blob/master/doc/syntax.txt提取多個值(如果存在)在谷歌電子表格單元格

從幾行像

  1. 我愛搖滾
  2. 我愛搖滾和剪刀
  3. 我討厭紙
  4. 我喜歡搖滾,紙和剪刀
  5. 我很想自己

我想提取「搖滾」,「紙」,並從每行的「剪刀差」。我想要正則表達式匹配所有上面的五行,並給我發現一些東西的Rock,Paper和Scissors。我主要在Google牀單中使用這個功能,但任何Google re2正則表達式都有幫助。

我已經試過....

".*(([Rock]{0,4})).*"

".*(([Rock]{4})|([Rock]{0})).*"

=REGEXEXTRACT(A2,".*(Rock{0,2}).*(paper{0,2}).*(scissors{0,2}).*")

和其他多種組合可供任何線得到搖滾,如果存在的話......但是,這總是喜歡零而不是四個......即使它找到Rock,它也會返回空字符串。如果我用{1}替換{0},即使找到完整的Rock,我也會得到「k」。

任何想法?

+0

'[搖滾] {0,4}'匹配字符類中的空字符或1到4個字符。 – Toto

+0

@Toto,是的。如果找不到Rock,它應該給我空,這樣我就不會出錯 - >整個正則表達式與字符串不匹配。因此,它可能會繼續在給定的字符串中搜索紙張。主要問題是優先。它應該優先考慮4個字符而不是零。 –

+0

由於貪婪的'。*'周圍。如果你想在一個字符串中匹配'Rock',只需使用'\ bRock \ b'。 – Toto

回答

1

到目前爲止,我發現Google表格中不支持regex features

請嘗試以下解決方法:

=ArrayFormula(IFERROR(REGEXREPLACE(A3,REGEXREPLACE(A3,"(Rock|paper|scissors)","(.*)"),{"$1","$2","$3"})))


在步驟1中該配方使正則表達式步驟2:

enter image description here

+0

我的確使用Google re2 GitHub開始我的帖子,以表明這些限制。 –

0

[Rock]將搜索字母R o c k。相反,使用(Rock)

+0

我試過...雖然它會給我一個完美的」搖滾「比賽,我無法量化它可能在句子中有零岩石,它會給我一個錯誤 –

+0

怎麼樣?(Rock){0,4}'? – Cid

+0

= REGEXEXTRACT(A2,「。*(Rock {0,2 })。*(paper {0,2})。*(scissors {0,2})。*「)當找到1個Rock時,它也會給我一個零 - 它更喜歡零匹配到正確的匹配 –

相關問題