正则表达式选择第3次出现之后的所有内容

时间:2012-08-17 22:28:42

标签: regex excel openoffice-calc

我有一组excel单元格,我需要使用更复杂的RegEx来删除所有内容,包括和之后的第三次出现" | " - (空间,管道,空间) - 某些单元格可能少或甚至出现0次,而其他单元格可能有10-20 +。总共有大约40,000个单元格,全部在一列中

Canon USA BJC 3000 | BJC 3010 | BJC 6000 | C755 | F30 | F50 | F60 | F80 | I550 | I850 | MP700 | MP730 | S400 | S450 | S500 | S520 | S530 | S600 | S630 | S750 Black Ink Cartridge 420 yield - 4479A003

应该成为

Canon USA BJC 3000 | BJC 3010 | BJC 6000

关于从哪里开始的任何建议,或正确的正则表达式来拉这个?

1 个答案:

答案 0 :(得分:2)

不完全确定Excel中的正则表达式是如何工作的,但以下内容应该有效:

((?:[^\|]*\|){2}[^\|]*).*

将其替换为第一个捕获组的内容(通常为\1$1)。

示例:http://gskinner.com/RegExr/?31sbq

说明:

(                  # start capture group 1
  (?:                # start non-capturing group, repeated exactly twice
     [^\|]*\|          # match any number of non '|' followed by '|' 
  ){2}               # end non-capturing group
  [^\|]*             # match any number of non '|'
)                  # end capturing group
.*                 # match to end of string

通过将其替换为第一个捕获组,.*匹配的所有内容都将被删除。