Regular-Expression
用於解析複數的 Ultraedit 正則表達式
我有一個 csv 文件,其中包含複數的數字表示。
-0.0272780+88932190i 0.2833029-10293882i 0.1990238+22901020i 0.3009823-22389991i
這是一個巨大的文件,我想將其轉換為 C 標頭檔中的複數表示。
const Ipp32fc complexes[] = { {-0.0272780,88932190 }, { 0.2833029,10293882 }, { 0.1990238,22901020 } { 0.3009823,22389991 }, ... // you get the idea
在查找/替換中我嘗試過
[\+-]$
或者
[\+-](+)$
用逗號替換內部符號然後我將執行一個簡單的查找/替換
i
並將其刪除。似乎無法獲得正確的正則表達式。
awk
在命令行上使用:$ awk 'BEGIN { print "const Ipp32fc complexes[] = {" } END { print "};" } { re=im=$0; sub("[+-][0-9.]*i$", "", re); sub("^-?[0-9.]*", "", im); sub("i$", "", im); printf "\t{ %s, %s },\n", re, im }' file const Ipp32fc complexes[] = { { -0.0272780, +88932190 }, { 0.2833029, -10293882 }, { 0.1990238, +22901020 }, { 0.3009823, -22389991 }, };
awk
添加了一些空格的命令:awk ' BEGIN { print "const Ipp32fc complexes[] = {" } END { print "};" } { re = im = $0 sub("[+-][0-9.]*i$", "", re) sub("^-?[0-9.]*", "", im) sub("i$", "", im) printf "\t{ %s, %s },\n", re, im }' file
BEGIN
這會在and塊中列印出所需的 C 語言頁眉和頁腳文本END
,而在較長的塊中解析輸入。每行的輸入都分配給
re
和im
變數。re
變數在虛部被切掉後得到一切,而變數im
得到實部並被i
移除。假定數字僅包含數字和點。
然後列印數據。