2016-08-29 29 views
0

我正在嘗試使用Notepad ++來選擇和刪除一些字符,這些字符出現在我正在處理的CSV文件的開頭。我想刪除的具體數據是在開頭的13個字符(123456.123456)之後,但在第一個|之前的任何內容。如何在正則表達式中的特定字符之前選擇特定文本?

數據如下:

167689.010802/PCT|071699.00087|"DATASETNAME" 
167689.010803/PCT2|071699.00070|"DATASETNAME" 
167689.010804/US|071699.00071|"DATASETNAME" 
167689.010805/JP|071699.00073|"DATASETNAME" 
167689.010806/CA|071699.00074|"DATASETNAME" 
167689.010807/AU|071699.00075|"DATASETNAME" 
167689.010808/EP|071699.00076|"DATASETNAME" 
167689.010809/CN|071699.00080|"DATASETNAME" 
167689.010810/US/CON|071699.00072|"DATASETNAME" 

正如你可以看到,數據已經|界定。但是,並非每一行都是一樣的。有些包含2組數據,有些則包含字母后跟數字。

在集合中選擇這個特定數據的最簡單方法是什麼?

+0

[Search:'^ \ d {6} \。\ d {6}'](https://regex101.com/r/eA7uM0/1) – Tushar

+0

@Tushar將選擇行中的前13個字符,而不是第一個|之前的數據字符。 – user3492006

+0

類似'(?m)^([^/\ r \ n] {13})[^ | \ r \ n] +(?= \ |)' – sln

回答

2

答案是:

(?<=^\d{6}\.\d{6})[^|]+ 

如果他們總是6個數字,圓點,一開始6個數字或:

(?<=^.{13})[^|]+ 

是否應該匹配任何13個字符。

它使用積極lookbehind在記事本++ reference稱爲斷言。你斷言,你只想匹配特定模式後的字符。

+0

領先的斷言在性能上非常昂貴。 – sln

+0

@sln在你的陳述中給了我們任何論點,說明一個帶有'^'的積極向後看的正則表達式在開始時表現非常糟糕。 – xenteros

+0

regex1的:[^ |] + 選項(<=^\ d {6} \ \ d {6}?):< m > 完成迭代:五十零分之五十(×1000) 相配每次迭代:9 消逝時間:3.28 S,3279.79毫秒,3279788微秒 Regex2:^ \ d {6} \ \ d {6} [^ |] + 選項:< m > 完成迭代:五十分之五十零(×1000) 相配每次迭代發現:9 已用時間:0.81秒,811.82毫秒,811818微秒 – sln

0

要做到這一點,最簡單的方法是使用一個捕獲組:

^(.{13})[^|]+ 

前13個字符被捕獲的第一捕獲組,和其他一切到|被丟棄。

您將需要使用替換$1

+0

點也會匹配管道字符。 (順便說一下,我沒有downvote) – sln

+0

@sln「任何跟隨開幕13個字符」是OP說。 – Laurel

+0

是的,我同意。 OP似乎有點固定在13,但接受一個答案,在某些情況下,前13個不匹配,表現糟糕。不知道正則表達式的人不能選擇正確的答案。你的+1。 – sln

相關問題