ค้นหาเว็บไซต์

วิธีแทนที่หลายสตริงในอาร์เรย์โดยใช้ PowerShell


เมื่อเร็วๆ นี้ ฉันกำลังจัดการสตริงและต้องการแทนที่สตริงหลายรายการในอาร์เรย์ PowerShell ฉันลองสี่วิธี ในบทช่วยสอนนี้ ฉันจะแสดงวิธีแทนที่สตริงหลายรายการในอาร์เรย์โดยใช้ PowerShell

หากต้องการแทนที่สตริงหลายรายการในอาร์เรย์โดยใช้ PowerShell คุณสามารถใช้ตัวดำเนินการ -replace ซึ่งสนับสนุนนิพจน์ทั่วไป ตัวอย่างเช่น หากคุณมีอาร์เรย์ของตัวย่อสถานะ @(“CA”, “NY”, “TX”, “FL”) คุณสามารถแทนที่ด้วยชื่อเต็มของรัฐได้โดยใช้ $states=$states -replace “CA”, "แคลิฟอร์เนีย"; $states=$states -แทนที่ “NY”, “New York”; $states=$states -แทนที่ “TX”, “Texas”; $states=$states -แทนที่ “FL”, “Florida”.

วิธีที่ 1: การใช้ตัวดำเนินการ -replace

ตัวดำเนินการ -replace ใน PowerShell เป็นวิธีที่ง่ายที่สุดในการแทนที่สตริง มันใช้การแสดงออกปกติ ต่อไปนี้คือวิธีที่คุณสามารถแทนที่สตริงหลายรายการในอาร์เรย์โดยใช้ตัวดำเนินการ -replace ใน PowerShell

ฉันขอแสดงตัวอย่างให้คุณดู

ตัวอย่าง

สมมติว่าคุณมีอาร์เรย์สตริงของชื่อรัฐและตัวย่อที่คุณต้องการสร้างมาตรฐานโดยการแทนที่ตัวย่อด้วยชื่อรัฐแบบเต็ม

ด้านล่างนี้คือสคริปต์ PowerShell

$states = @("CA", "NY", "TX", "FL", "CA", "NY")

# Replace state abbreviations with full names
$states = $states -replace "CA", "California"
$states = $states -replace "NY", "New York"
$states = $states -replace "TX", "Texas"
$states = $states -replace "FL", "Florida"

$states

ในตัวอย่างนี้ เราใช้ตัวดำเนินการ -replace เพื่อแทนที่ตัวย่อแต่ละสถานะด้วยชื่อเต็ม

เอาท์พุต :

California
New York
Texas
Florida
California
New York

ฉันรันสคริปต์ PowerShell ด้านบนโดยใช้โค้ด VS และสคริปต์แสดงผลลัพธ์ที่แน่นอนหลังจากแทนที่แล้ว ตรวจสอบภาพหน้าจอด้านล่าง:

ตรวจสอบอาร์เรย์ประกอบด้วยใน PowerShell

วิธีที่ 2: การใช้วิธีแทนที่()

วิธีการ Replace() เป็นอีกวิธีหนึ่งในการแทนที่สตริงใน PowerShell วิธีนี้จะคำนึงถึงขนาดตัวพิมพ์และไม่ใช้นิพจน์ทั่วไป

ฉันจะแสดงตัวอย่างวิธีการใช้เมธอดแทนที่() เพื่อแทนที่สตริงหลายรายการในอาร์เรย์ใน PowerShell

ตัวอย่าง

สมมติว่าคุณมีชื่อเมืองมากมายที่มีการพิมพ์ผิดทั่วไปที่คุณต้องการแก้ไข

$cities = @("Los Angles", "San Fransisco", "New Yrok", "Chcago")

# Correct common typos
$cities = $cities.ForEach{ $_.Replace("Los Angles", "Los Angeles") }
$cities = $cities.ForEach{ $_.Replace("San Fransisco", "San Francisco") }
$cities = $cities.ForEach{ $_.Replace("New Yrok", "New York") }
$cities = $cities.ForEach{ $_.Replace("Chcago", "Chicago") }

$cities

วิธีการ ForEach จะวนซ้ำแต่ละองค์ประกอบในอาร์เรย์ โดยใช้วิธี Replace() เพื่อแก้ไขคำที่พิมพ์ผิด

เอาท์พุต :

Los Angeles
San Francisco
New York
Chicago

ที่นี่คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่างหลังจากที่ฉันรันสคริปต์ PowerShell ด้านบน

ตรวจสอบวิธีการแปลงอาร์เรย์เป็นสตริงใน PowerShell

วิธีที่ 3: การใช้ Hashtable สำหรับการทดแทนจำนวนมาก

สำหรับการแทนที่หลายรายการ โดยเฉพาะอย่างยิ่งเมื่อทำงานกับชุดข้อมูลขนาดใหญ่ การใช้แฮชเทเบิลจะทำให้สคริปต์ของคุณมีประสิทธิภาพและบำรุงรักษาได้มากขึ้น ฉันขอแสดงตัวอย่างให้คุณดู

ตัวอย่าง

มาอัปเดตรายการตัวย่อของรัฐเป็นชื่อเต็มโดยใช้แฮชเทเบิล

$states = @("CA", "NY", "TX", "FL", "CA", "NY")
$replacements = @{
    "CA" = "California"
    "NY" = "New York"
    "TX" = "Texas"
    "FL" = "Florida"
}

# Replace abbreviations using the hashtable
$states = $states.ForEach{ 
    $replacements.ContainsKey($_) ? $replacements[$_] : $_ 
}

$states

ในตัวอย่างนี้ เราใช้แฮชเทเบิลเพื่อจัดเก็บการแมปคำย่อกับชื่อเต็ม วิธีการ ForEach ตรวจสอบว่ามีรายการปัจจุบันอยู่ใน hashtable หรือไม่และแทนที่ตามนั้น

เอาท์พุต :

California
New York
Texas
Florida
California
New York

คุณยังสามารถตรวจสอบผลลัพธ์ในภาพหน้าจอด้านล่าง คุณจะได้รับผลลัพธ์ที่แน่นอนเมื่อคุณเรียกใช้สคริปต์ PowerShell ข้างต้น

วิธีที่ 4: การใช้ฟังก์ชันแบบกำหนดเอง

นี่เป็นวิธีสุดท้าย คุณสามารถสร้างฟังก์ชันแบบกำหนดเองที่คุณสามารถนำมาใช้ซ้ำเพื่อแทนที่หลายสตริงในอาร์เรย์ใน PowerShell ได้

นี่คือตัวอย่าง

ตัวอย่าง

พิจารณาอาร์เรย์หมายเลขโทรศัพท์ในรูปแบบต่างๆ ที่คุณต้องการทำให้เป็นมาตรฐานให้เป็นรูปแบบเดียวกัน

$phoneNumbers = @("(123) 456-7890", "123.456.7890", "123-456-7890", "1234567890")

function Normalize-PhoneNumber {
    param (
        [string]$number
    )
    # Remove non-numeric characters
    $number = $number -replace "\D", ""
    # Format as (XXX) XXX-XXXX
    return "({0}) {1}-{2}" -f $number.Substring(0,3), $number.Substring(3,3), $number.Substring(6)
}

# Normalize phone numbers
$phoneNumbers = $phoneNumbers.ForEach{ Normalize-PhoneNumber $_ }

$phoneNumbers

ฟังก์ชัน Normalize-PhoneNumber จะลบอักขระที่ไม่ใช่ตัวเลขทั้งหมดออกจากหมายเลขโทรศัพท์ และจัดรูปแบบให้เป็นมาตรฐาน การใช้ฟังก์ชันนี้ร่วมกับเมธอด ForEach ช่วยให้มั่นใจได้ว่าหมายเลขโทรศัพท์ทั้งหมดในอาร์เรย์จะถูกทำให้เป็นมาตรฐานอย่างสม่ำเสมอ

เอาท์พุต :

(123) 456-7890
(123) 456-7890
(123) 456-7890
(123) 456-7890

บทสรุป

การแทนที่สตริงหลายรายการในอาร์เรย์โดยใช้ PowerShell สามารถทำได้หลายวิธี เช่น โดยใช้ตัวดำเนินการ -replace, วิธี Replace(), hashtable หรือฟังก์ชันแบบกำหนดเอง

ในบทช่วยสอนนี้ ฉันได้อธิบายแต่ละวิธีพร้อมตัวอย่างวิธีแทนที่สตริงหลายรายการในอาร์เรย์ใน PowerShell

บทความที่เกี่ยวข้อง