2016-10-25 59 views
1

EDIT正則表達式:在拍攝組替代字符

在一個正則表達式,可以匹配捕獲組被具有相同匹配改變代與另一個字符代替?

原來的問題

我轉換的產品清單到CSV文本文件。列表中的每個線具有:number name[ description] price格式如下:

1 PRODUCT description:120 
2 PRODUCT NAME TWO second description, maybe:80 
3 THIRD PROD:18 


所得格式還必須包括一個蛞蝓(具有-代替)作爲第二場:

1 PRODUCT:product-1:description:120 
2 PRODUCT NAME TWO:product-name-two-2:second description, maybe:80 
3 THIRD PROD:third-prod-3::18 

正在使用的正則表達式是:

(\d+) ([A-Z ]+?)[ ]?([a-z ,]*):([\d]+)

和替換字符串是:

`\1 \2:\L$2-\1:\3:\4 

這樣,我的結果是:

1 PRODUCT:product-1:description:120 
2 PRODUCT NAME TWO:product name two-2:second description, maybe:80 
3 THIRD PROD:third prod-3::18 

我懷念的是分隔連字符-我需要在第二場,即組\2與' -'而不是''。
單個正則表達式有可能嗎?還是我應該去第二遍?

(現在我使用的崇高的文本編輯器)

感謝名單。

+0

我敢肯定,你需要新一輪的正則表達式來解決這個問題。 – Aaron

+0

@Aaron我也開始相當肯定,如果你確定,請添加一個答案,我會接受它;) –

回答

0

我不認爲這樣做在一次通過是合理的,也許它甚至不可能。要用連字符替換空格,您將需要多次傳遞或使用連續匹配,兩者都將丟失重新排列結構所需的捕獲組的上下文。因此,在您第一次替換後,我會搜索(?m)(?:^[^:\n]*:|\G(?!^))[^: \n]*\K並替換爲-。我不確定Sublime是否默認使用多行修飾符,那麼您可以刪除(?m)

如果您要使用支持回調函數進行正則表達式替換操作的編程語言,那麼您可以在該函數中替換-來取代回答。