2015-04-02 168 views
1

組,正則表達式在Notepad ++中的括號內排除文本++搜索替換

這是我的第一篇文章。我喜歡使用Notepad ++進行cnc程序g代碼編輯。有時候一個程序將包含文本之間沒有空白的文字。註釋包含在括號內。有時候線包含註釋,但大多數時候並不:

G90G10L2P1X-38.046Y-11.361Z-36.991(G54 B=0) 

G90G10L2P1X5.68Y5.69 

G54G00G90X0.0Y-5.0T53 

G43H55Z6.0M8 

S300M03 

此正則表達式將添加的所有單詞之間的空間,但跳過帶有括號結尾的行:

搜索:(.)([A-Z])(?!.*\))

更換: \1 \2\3

到目前爲止好。我想要的是在所有單詞之間添加空格,只排除註釋,而不是像上面那樣跳過包含註釋的整行。

任何想法或幫助將不勝感激!我一直在玩這個遊戲,並且搜索了很多,但沒有成功。

**編輯我的貼子來展示更復雜的例子15年4月8日:

(FILE NAME XY9032.010) 
(SUB PR.321.322.323.327.328.329.325.324) 
(** NONSENSE COMMENT TEXT 324 TO SHOW A DIFF POSSIBLE COMB AB 2/25/15 **) 
N1(STORE TOP BOSS G55.X) 
N2(STORE BOT. BOSS G55.X) 
N3(STORE BOT. BOSS G55.Y) 
G00G17G40G49G80G90 
G91G28X0Y0Z0.M05 
G90G0B0 
N4G90G10L2P5X-38.046Y-11.361Z-37.021(G58 B0 BOTTOM BORES) 
N5G90G10L2P6X-23.130Y-11.361Z-44.027(G59 B180 BOTTOM BORE) 
G90G10L2P1X#568Y#569 
G54G00G90X0.0Y-5.0T53 
G43H55Z6.0M8 
S300M03 
Z.6 
N6G01Z.015F50. 
G01Y-7.0F9.0 
G02J7.0F18.0 
G00Z6.0M09 
G91G28X0Y0Z0M05 
M1 

這個小正則表達式會發現括號之間的所有文本實例:

(\(.+\)) 

例如,搜索:

(\(.+\)) 

替換:

\1**** 

將在文本文件中的括號的每個實例之後添加星號。

我只是不能弄清楚從本文其他地方描述的更廣泛的搜索中排除相同的正則表達式表達式。

這不起作用 - 仍然在圓括號內添加空格。強調=空間:

Search: (?!\(.+\))([a-z]-?\d+(?:\.\d+)?) 
Replace: $1_ 
+0

你可能想添加正則表達式標籤。 – 2015-04-02 17:31:32

+0

什麼是你的「單詞」?預期的結果是什麼? – Toto 2015-04-02 17:42:48

+0

在一個cnc程序中,一個單詞是一個字母后跟數字。 – Diedesigner 2015-04-02 17:44:33

回答

0

很難確定你真正認爲的「單詞」,但使用你的例子和評論,我已經把它放在了一起我想你想要什麼。無論哪種方式,這不是你真正的問題。這個問題是不包括註釋,此有效的作用:

搜索:(\(.*?\))|([a-z](?=[-#.\d])([-#]?\d*(\.\d*)?))

替換爲:$1$2_ [強調了空間]

交替,(\(.*?\))的第一部分,捕捉任何意見,啜起來所以它們不會與替換的第二部分匹配

注意:每行最後都會有一個空格,但這是Notepad ++菜單上的一個簡單修剪。

+0

此解決方案的工作原理和解答我原來的問題。 – Diedesigner 2015-04-08 20:40:15

0

如果你定義一個「字」爲一個字母后面的數字,那麼這個正則表達式將捕獲它們:

([a-zA-Z][0-9.-]+) 

然後你就可以\1(反斜槓一個空格替換它們)。

+0

這將用於捕獲,但如何排除所有註釋(括號內的文本)?我希望它們被排除,因爲註釋已經具有適當的文本間距如果他們沒有被排除在外,那麼通用文本的每個單詞將在它們之間具有雙重空間。 – Diedesigner 2015-04-02 17:58:27

1

這是正確的爲您提供:

查找內容:(?<!\()([a-z]-?\d+(?:\.\d+)?)
替換:$1_
我用_用於可視化空間

隨着測試的情況下,它提供了:

G90 G10 L2 P1 X-38.046 Y-11.361 Z-36.991 (G54 B=0) 

G90 G10 L2 P1 X5.68 Y5.69 

G54 G00 G90 X0.0 Y-5.0 T53 

G43 H55 Z6.0 M8 

S300 M03 
+0

看起來不錯!我會嘗試一個完整的程序文件(數百行),並讓你知道結果。 – Diedesigner 2015-04-02 18:05:14

+0

@Diedesigner:如果它適合你,隨時標記答案爲接受:)請參閱:http://stackoverflow.com/help/someone-answers – Toto 2015-04-02 18:10:57

+0

@Diedesigner:它不工作了嗎?你爲什麼不接受答案? – Toto 2015-04-08 12:43:59

-1

嗨,我是一個FANUC程序設計師太...我使用notepad++ 我往

(\(.*?\))|([0-9]|(]))([A-Z]) 

,代之以

\1\2 \4 

它讓我們在後面加上一個空格,但...

and i add (]) to

x#750z0 

我來另一種選擇。 ([。]](())([AZ])|(())(THEN | DO | GOTO)((012) )([AZ])

寫:\ 1 \ 2 \ 3 \ 4 \ 6 \ 7 \ 5

相關問題