2017-08-02 65 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时,它也会给我一个零 - 它更喜欢零匹配到正确的匹配 –