[英]Perl - Format Strings in Array using Regular Expressions
我有一個表示大小的字符串數組。
以下是所有格式變體的列表:
目標:轉換為以下格式:
當前,所有值都被推送到名為@sizearray的數組中,如下所示:
push(@sizearray, $data[$size_num]);
然后,
my @formattedsize = @sizearray;
foreach (@formattedsize) {
if ($formattedsize[$_] =~ /(\d+)x(\d+)/) {
#convert to
if (???) {
#???
}
if (???) {
#???
}
}
我將如何遍歷數組中的每個元素並將值保存到具有新格式的新數組中?
您正在嘗試解決2個問題:
假設您只有兩個選項,即矩形和圓形。 矩形似乎是由一對以'x'分隔的實數定義的,因此正則表達式可能是
(\d+(?:\.\d+)?)\s*x\s*(\d+(?:\.\d+)?)
您在這里有兩個實數表達式:
x
和更多可選的空格 數字表達式外的括號是捕獲組,它使正則表達式引擎使結果中可用的任何匹配項。 內括號(?:\\.\\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.