2017-07-06 20 views
1

我得到以下结果使用正则表达式REGEXT以下

从谷歌片的提取物。如果我有以下的2个项目:

S01_123_123_123

S02_1_123_123_123

我想提取

S01

S02_1

我曾尝试以下公式:

=iferror(sort(unique(arrayformula(REGEXEXTRACT(Sheet!A$2:A,"^(.*?)_"))))) 这给:

S01

S02

=iferror(sort(unique(arrayformula(REGEXEXTRACT(Sheet!A$2:A,"^z.*?_"))))) 

S01_

S02_

现在用完了想法。我甚至尝试过用非分组(?:_)或OR“|”但这似乎并没有做任何事情。

+0

尝试'^(。*?)(?:_ [^ _] +){3} $' –

+0

您可以使用'= REGEXREPLACE(A1,“_ \ d {3}”,“”) '将“提取物”放入相邻的单元格中 – garyh

回答

0

您可以使用

^(.*?)(?:_[^_]+){3}$ 

的部分捕获括号将由REGEXEXTRACT函数返回内。

图案的详细资料

  • ^ - 串
  • 开始
  • (.*?) - 任何0+字符尽可能少的,因为*?是一个懒惰的量词
  • (?:_[^_]+){3} - 的 正好三个连续出现
    • _ - 下划线
    • [^_]+ - 一个或多个符号比_
  • $其他 - 字符串的结尾。
0

感谢Wiktor解决您的问题。

^(.*?)(?:_[^_]+){3}$ 

如果你会这么好心来解释这是如何工作的

+0

您应该将其添加为注释。请删除答案,我会添加一个答案。 –

+0

请考虑接受我的答案。如果有什么还不清楚,请通过评论告诉我。 –