Regular-Expression

用於解析複數的 Ultraedit 正則表達式

  • January 28, 2020

我有一個 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,而在較長的塊中解析輸入。

每行的輸入都分配給reim變數。re變數在虛部被切掉後得到一切,而變數im得到實部並被i移除。

假定數字僅包含數字和點。

然後列印數據。

引用自:https://unix.stackexchange.com/questions/564549