簡體   English   中英

Perl-使用正則表達式格式化數組中的字符串

[英]Perl - Format Strings in Array using Regular Expressions

我有一個表示大小的字符串數組。

以下是所有格式變體的列表:

  1. 2x3
  2. 3.6x5.6
  3. 6'RD

目標:轉換為以下格式:

  1. 2'x 3'
  2. 3英尺6英寸x 5英尺6英寸
  3. 6'回合

當前,所有值都被推送到名為@sizearray的數組中,如下所示:

push(@sizearray, $data[$size_num]);

然后,

my @formattedsize = @sizearray;

foreach (@formattedsize) {

    if ($formattedsize[$_] =~ /(\d+)x(\d+)/) {

        #convert to

    if (???) {

        #???

    }

    if (???) {

        #???

    }

}

我將如何遍歷數組中的每個元素並將值保存到具有新格式的新數組中?

您正在嘗試解決2個問題:

  1. 解析輸入以提取“有意義的”數據,即幾何形狀(矩形,圓形等)和參數(縱橫比,直徑等)。 在您能夠做到這一點之前,您必須建立可能性的“宇宙”。 不僅僅是矩形和圓形嗎? 這是最困難的部分。
  2. 提取提取的數據並標准化/標准化格式。 這是簡單的部分

假設您只有兩個選項,即矩形和圓形。 矩形似乎是由一對以'x'分隔的實數定義的,因此正則表達式可能是

(\d+(?:\.\d+)?)\s*x\s*(\d+(?:\.\d+)?)

您在這里有兩個實數表達式:

  • 1個或多個數字,后跟一組可選的點和一個或多個數字
  • 可選的空格, x和更多可選的空格
  • 1個或多個數字,后跟一組可選的點和一個或多個數字

數字表達式外的括號是捕獲組,它使正則表達式引擎使結果中可用的任何匹配項。 內括號(?:\\.\\d+)? 是一個非捕獲組( ?:部分)。 它允許您應用尾隨? 小數部分的量詞(0或1),但不單獨捕獲。

如果輸入與此不匹配,則進入下一個模式,尋找一個舍入的規格。 根據需要重復所有可能性。

對於以上表達式

# assume string to be parsed is in $_
if (my ($h,$w) = /(\d+(?:\.\d+)?)\s*x\s*(\d+(?:\.\d+)?)/))
{
    printf "%s x %s\n", $h, $w;
}

我沒有測試過,所以可能會有錯別字...但這是一般的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM