วิธีแยกสตริงระหว่างวงเล็บใน PowerShell
วันนี้ ฉันกำลังทำงานกับสตริงใน PowerShell ซึ่งฉันต้องการแยกสตริงระหว่างวงเล็บ ฉันลองวิธีการต่างๆ ในบทช่วยสอนนี้ ฉันจะแสดงวิธีแยกสตริงระหว่างวงเล็บใน PowerShell โดยใช้วิธีการต่างๆ
หากต้องการแยกสตริงระหว่างวงเล็บใน PowerShell คุณสามารถใช้นิพจน์ทั่วไปได้ ตัวอย่างเช่น หากต้องการแยกรหัสพื้นที่จากหมายเลขโทรศัพท์ เช่น (123) 456-7890 คุณสามารถใช้รูปแบบ \((\d{3})\) พร้อมด้วยตัวดำเนินการ -match นี่คือสคริปต์ตัวอย่าง:
$phoneNumbers = @("(212) 555-1234", "(415) 555-5678", "(305) 555-9012")
$areaCodes = foreach ($number in $phoneNumbers) {
if ($number -match "\((\d{3})\)") { $matches[1] }
}
Write-Output $areaCodesรหัสนี้จะรวบรวมรหัสพื้นที่ที่อยู่ในวงเล็บ
โดยเฉพาะอย่างยิ่ง ฉันจะแสดงสามวิธีในการแยกสตริงระหว่างวงเล็บใน PowerShell
วิธีที่ 1: การใช้นิพจน์ทั่วไป (Regex)
ใน PowerShell คุณสามารถใช้นิพจน์ทั่วไปเพื่อจัดการสตริงและรูปแบบการเดินขบวนได้ ตอนนี้ ฉันจะแสดงตัวอย่างวิธีแยกสตริงระหว่างวงเล็บโดยใช้ regex
ตัวอย่างที่ 1: แยกรหัสพื้นที่ออกจากหมายเลขโทรศัพท์
สมมติว่าคุณมีรายการหมายเลขโทรศัพท์ในรูปแบบ (123) 456-7890 และต้องการแยกรหัสพื้นที่
นี่คือสคริปต์ฉบับเต็ม
$phoneNumbers = @(
"(212) 555-1234",
"(415) 555-5678",
"(305) 555-9012"
)
$areaCodes = foreach ($number in $phoneNumbers) {
if ($number -match "\((\d{3})\)") {
$matches[1]
}
}
Write-Output $areaCodesในตัวอย่างนี้ รูปแบบ regex \((\d{3})\) ใช้เพื่อจับคู่ตัวเลข 3 หลักที่อยู่ในวงเล็บ ตัวดำเนินการ -match ตรวจสอบว่าสตริงตรงกับรูปแบบหรือไม่ และ $matches[1] จะแยกกลุ่มแรกที่บันทึกไว้ ซึ่งเป็นรหัสพื้นที่
อ่านแทนที่อักขระพิเศษในสตริงใน PowerShell
ตัวอย่างที่ 2: แยกรหัสไปรษณีย์ออกจากที่อยู่
พิจารณารายการที่อยู่ซึ่งมีรหัสไปรษณีย์อยู่ในวงเล็บ ตัวอย่างเช่น 123 Main St, Springfield, IL (62704) ต่อไปนี้เป็นสคริปต์สำหรับแยกรหัสไปรษณีย์จากที่อยู่นี้
$addresses = @(
"123 Main St, Springfield, IL (62704)",
"456 Elm St, Seattle, WA (98101)",
"789 Oak St, Miami, FL (33101)"
)
$zipCodes = foreach ($address in $addresses) {
if ($address -match "\((\d{5})\)") {
$matches[1]
}
}
Write-Output $zipCodesในที่นี้ รูปแบบ regex \((\d{5})\) ใช้เพื่อจับคู่ตัวเลขห้าหลักที่อยู่ในวงเล็บ จากนั้นรหัสไปรษณีย์ที่บันทึกไว้จะถูกส่งออก
วิธีที่ 2: การใช้วิธีสตริง
ให้ฉันบอกคุณอีกวิธีหนึ่ง
คุณสามารถใช้วิธีสตริงของ PowerShell เพื่อค้นหาตำแหน่งของวงเล็บและแยกสตริงย่อยระหว่างวงเล็บเหล่านั้นได้
ให้เราเข้าใจด้วยตัวอย่าง
ตัวอย่างที่ 3: แยกชื่อเมืองออกจากสตริง
สมมติว่าคุณมีรายการสตริงที่ชื่อเมืองอยู่ในวงเล็บ เช่น เมืองหลวงของเท็กซัสคือ (ออสติน) จากนั้น คุณสามารถเขียนสคริปต์ด้านล่างเพื่อรับสตริงระหว่างวงเล็บใน PowerShell
$statements = @(
"The capital of Texas is (Austin)",
"The capital of California is (Sacramento)",
"The capital of New York is (Albany)"
)
$cityNames = foreach ($statement in $statements) {
$startIndex = $statement.IndexOf('(') + 1
$endIndex = $statement.IndexOf(')')
$statement.Substring($startIndex, $endIndex - $startIndex)
}
Write-Output $cityNamesในตัวอย่างนี้ เราใช้วิธี IndexOf เพื่อค้นหาตำแหน่งของวงเล็บเปิดและปิด จากนั้นจะใช้วิธี Substring เพื่อแยกชื่อเมือง
วิธีที่ 3: การใช้ .NET Framework
ตอนนี้ ฉันจะแสดงให้คุณเห็นวิธีที่สาม ซึ่งส่วนใหญ่จะใช้ได้หากคุณทำงานกับการดำเนินการสตริงที่ซับซ้อน
คุณสามารถใช้ .NET Framework สำหรับการจัดการสตริงที่ซับซ้อนมากขึ้น คลาส System.Text.RegularExpressions.Regex มีฟังก์ชันเพิ่มเติม
ตัวอย่างที่ 4: แยกคำย่อของรัฐออกจากประโยค
พิจารณารายการประโยคที่มีตัวย่อของรัฐอยู่ในวงเล็บ เช่น ฉันไปเที่ยว (นิวยอร์ก) เมื่อฤดูร้อนที่แล้ว จากนั้น คุณสามารถใช้สคริปต์ PowerShell ด้านล่างได้
$sentences = @(
"I visited (NY) last summer",
"The conference was held in (CA)",
"They moved to (TX) last year"
)
$stateAbbreviations = foreach ($sentence in $sentences) {
[System.Text.RegularExpressions.Regex]::Match($sentence, "\((\w{2})\)").Groups[1].Value
}
Write-Output $stateAbbreviationsในตัวอย่างนี้ คลาส System.Text.RegularExpressions.Regex ใช้เพื่อจับคู่ตัวย่อสถานะสองตัวอักษรที่อยู่ในวงเล็บ คุณสมบัติ Groups[1].Value แยกสตริงย่อยที่ตรงกัน
บทสรุป
PowerShell มีวิธีการต่างๆ สำหรับ การแยกสตริงระหว่างวงเล็บ ด้านล่างนี้เป็นตัวอย่างที่สมบูรณ์ของสามวิธีที่ฉันได้อธิบายในตัวอย่างนี้
- การใช้นิพจน์ทั่วไป
- การใช้วิธีสตริง
- การใช้. NET Framework
ฉันหวังว่านี่จะช่วยคุณได้ หากคุณยังคงมีคำถามใด ๆ โปรดแจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง


