วิธีแทนที่หลายสตริงในอาร์เรย์โดยใช้ 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


