2017-07-06 44 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

請考慮接受我的答案。如果有什麼還不清楚,請通過評論告訴我。 –