PowerShell Dizeden Özel Karakterleri Kaldırma [5 Yol]
Regex.Replace() Yöntemini Kullanma
PowerShell'de belirtilen dizeden özel karakterleri kaldırmak için Regex.Replace() yöntemini kullanın.
Regex.Replace() Yöntemini kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = [System.Text.RegularExpressions.Regex]::Replace($str, '[^\w\s]', '')
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youÖncelikle $str adında bir değişken tanımladık ve değerini bazı özel karakterler içeren bir dizeye ayarladık. Daha sonra özel karakterleri boş bir karakterle değiştirmek için System.Text.RegularExpressions ad alanından Regex sınıfının Replace() yöntemini kullandık. sicim.
Replace() yöntemi üç bağımsız değişken aldı: dize ($str), normal ifade ('[^\w\s]') ) ve boş bir dize (''). Normal ifade modeli, sözcük karakteri (\w ile temsil edilir) veya boşluk karakteri (\s ile gösterilir) olmayan herhangi bir karakterle eşleşiyordu. Burada ^ olumsuzlama anlamına geliyordu. Değiştirilen dizenin boş olduğunu ('') ve eşleşen özel karakterlerin giriş dizesinden kaldırıldığını unutmayın.
Daha sonra, orijinal ve temizlenmiş dizeyi PowerShell konsolunda görüntülemek için Write-Host cmdlet'ini kullandık; @"..."@ gösterimi çok satırlı bir ifade yazmak için kullanıldı.
Kelime karakterleri
[a-zA-Z0-9_]'dır.
Unutmayın, System.Text.RegularExpressions ad alanı sisteminizde zaten mevcut değilse, Add-Type cmdlet'ini aşağıdaki gibi kullanın:
Ad Alanı Ekle:
Add-Type -TypeDefinition @"
using System.Text.RegularExpressions;
"@Add-Type cmdlet'i PowerShell oturumuna dinamik olarak bir derleme veya .NET türü ekler. Gerekli ad alanı henüz mevcut değilse bu cmdlet'e ihtiyaç vardır.
Benzer şekilde, PowerShell'deki bir dize dizisinden özel karakterleri kaldırmak için ForEach döngüsü içindeki Regex.Replace() yöntemini kullanırız.
Regex.Replace() Yöntemini kullanın:
$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$cleanedStr = foreach ($string in $strArray) {
[System.Text.RegularExpressions.Regex]::Replace($string, '[^\w\s]', '')
}
Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStr
"@ÇIKTI:
Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello WorldYukarıdaki kod çerçevesinde, bir dizi operatörünü (@()) kullanarak bir dizi dize oluşturduk ve bu diziyi $strArray değişkenine atadık. Daha sonra, $strArray üzerinde yineleme yapmak için ForEach döngüsünü kullandık. Bundan sonra, mevcut dizeden ($string) özel karakterleri kaldırmak için her yinelemede Regex.Replace() yöntemini kullandık. Önceki kod örnekleriyle Regex.Replace() yöntemini öğrendik; buna başvurabilirsiniz.
Temizlenen stringleri $cleanedStr değişkenine atadık. Son olarak, konsoldaki orijinal ve güncellenmiş dize dizisini yazdırmak için Write-Host cmdlet'ini kullandık.
String.Replace() Yöntemini Kullanma
PowerShell'de belirtilen dizeden özel karakterleri kaldırmak için String.Replace() yöntemini kullanın. Bu yaklaşım, belirli bir özel karakteri/karakterleri kaldırırken kullanışlıdır.
String.Replace() Yöntemini kullanın:
$str = "How #$%are ^&*you?@!"
$specialChars = @('#','$','%','^','&','*','@','!')
echo "Original String: $str"
ForEach ($character in $specialChars) {
$str = $str.Replace($character, '')
}
echo "Cleaned String: $str"ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are you?Yine özel karakterler içeren bir $str var. Daha sonra, her öğenin çıktı dizesinde istemediğimiz özel bir karakter olduğu bir dizi oluşturmak için bir dizi operatörü (@()) kullandık. Bu diziyi $specialChars değişkeninde sakladık. Daha sonra, PowerShell konsolunda $str'yi görüntülemek için echo komutunu kullandık.
Bundan sonra, $specialChars üzerinde yineleme yapmak için ForEach döngüsünü (a.k.a. ForEach deyimi) kullandık. Her yinelemede String sınıfının Replace() yöntemini çağırdık. Geçerli karakter ve boş bir dize olmak üzere iki bağımsız değişken gerekiyordu; burada eşleşen geçerli karakteri boş bir dizeyle değiştirmek istedik.
Her yinelemede $str'yi güncellediğimize dikkat edin. Son olarak, güncellenen $str'i yazdırmak için başka bir echo kullandık.
Benzer şekilde, PowerShell'deki bir dize dizisinden özel karakterleri kaldırmak için iç içe geçmiş ForEach döngüsü içindeki String.Replace() yöntemini kullanırız.
String.Replace() Yöntemini kullanın:
$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$specialChars = @('#','$','%','^','&','*','@','!')
echo "Original Array of Strings: $strArray"
ForEach ($index in 0..($strArray.Length - 1)) {
ForEach ($character in $specialChars) {
$strArray[$index] = $strArray[$index].Replace($character, '')
}
}
echo "Cleaned Array of Strings: $strArray"ÇIKTI:
Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you? Hello World
Bu örnek, bir dizi dizeye ($strArray), bir dizi özel karaktere ($specialChars) sahip olan ve 'i kullanan son örnekle karşılaştırılabilir. PowerShell konsolunda komutunu kullanın.$strArray öğesini görüntülemek için echo
Daha sonra iç içe geçmiş ForEach döngüsünü kullandık. Dış döngü, $strArray üzerinde yineleme yapmaktan sorumluydu; $strArray'deki her öğeye erişmek için $index değişkenini kullandı. İç döngü, $specialChars dizisi üzerinde döngü yapmaktan sorumluydu.
İç ForEach döngüsünün içinde, özel karakteri etkili bir şekilde boş bir dizeyle değiştirmek ve bunları dizeden çıkarmak için String.Replace() yöntemini kullandık. Son olarak, güncellenmiş dize dizisini görüntülemek için başka bir echo kullandık.
-replace Operatörünü Kullanma
-replace operatörü, belirli bir dizeden veya dizeler dizisinden özel karakterleri kaldırmak için normal ifadenin farklı varyasyonlarıyla kullanılabilir. -replace operatörünü kullanarak bunları öğrenelim.
PowerShell'de belirtilen dizeden özel karakterleri kaldırmak için aralıklar yoluyla belirtilen normal ifadeyle -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^a-zA-Z0-9\s]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youPowerShell'de belirtilen dizeden özel karakterleri kaldırmak için ASCII karakterler kullanılarak yazılmış normal ifadeyle -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\x30-\x39\x41-\x5A\x61-\x7A\x20]+', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youPowerShell'de belirtilen dizeden özel karakterleri kaldırmak için Unicode karakterler kullanılarak yazılmış normal ifadeyle -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\u0030-\u0039\u0041-\u005A\u0061-\u007A\u0020]+', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youPowerShell'de belirtilen dizeden özel karakterleri kaldırmak için meta karakter (\W) kullanılarak belirtilen normal ifadeyle -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[\W]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: HowareyouPowerShell'de belirtilen dizeden özel karakterleri kaldırmak için Unicode kategorileri kullanılarak yazılan normal ifadeyle -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\p{L}\p{Nd}]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: HowareyouAlternatif olarak, projenin ihtiyaçlarına göre bazı özel karakterleri korumak istiyorsanız aşağıdakileri yapabilirsiniz.
-replace Operatörünü kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\p{L}\p{Nd}/?/!/\s]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are you?!Bu bölümdeki yukarıdaki örnekler birbirine benziyordu ve özel karakterler içeren bir $str içeriyordu. Hepsi, özel karakterleri boş bir dizeyle değiştirerek kaldırmak için -replace operatörünü bir regex ile kullandı. Temizlenen string'i $cleanedStr değişkenine atadık.
Ayrıca yukarıdaki örneklerde, PowerShell konsolunda birincil ve güncellenmiş dizeyi yazdırmak için Write-Host cmdlet'i kullanıldı. Yalnızca düzenli ifadeyi belirtmede farklılık gösteriyorlardı. Bunları aşağıda öğrenelim.
[^a-zA-Z0-9\s]- Bu normal ifade modeli, alfabeler (a-zveA-Z), sayılar hariç tüm karakterlerle eşleşiyordu (0-9) ve bir boşluk karakteri (\s).[^\x30-\x39\x41-\x5A\x61-\x7A\x20]+- Bu normal ifade modeli ASCII karakterleri kullanılarak yazılmıştır;0ile9(\x30-\x39) ve büyük harfler (\x41) arasındaki sayılar dışındaki tüm karakterlerle eşleşiyordu -\x5A), küçük harfler (\x61-\x7A) ve boşluk karakteri (\x20). Burada+, önceki grup veya karakter sınıfının en az bir veya daha fazla tekrara sahip olması gerektiğini belirtir.[^\u0030-\u0039\u0041-\u005A\u0061-\u007A\u0020]+- Bu normal ifade sonuncuya benziyordu ancak Unicode karakterler kullanılarak belirtildi. 0-9 arasındaki sayılar (\u0030-\u0039), büyük ve küçük harfler (\u0041-\u005Ave\u0061) dışındaki tüm karakterlerle eşleşiyordu -\u007A) ve bir boşluk karakteri (\u0020).[\W]- Kelime olmayan herhangi bir karakterle eşleşir. Kelime karakterlerinin[a-zA-Z0-9_]olduğunu unutmayın. Bu nedenle, çıktı dizginizde alt çizgiye (_) ihtiyacınız yoksa bu normal ifadeyi kullanmamalısınız.[^\p{L}\p{Nd}]- Harf veya rakam olmayan tüm karakterlerle eşleşti. Burada\p{L, farklı dillerden veya alfabelerden gelen harfler de dahil olmak üzere tüm Unicode harf karakterleriyle eşleşiyordu.\p{Ndherhangi bir Unicode ondalık basamak karakteriyle eşleşirken.[^\p{L}\p{Nd}/?/!/\s]- Bu normal ifade yukarıdakine benzer ancak belirli özel karakterleri korumak istediğimizde kullanılır. Bu durumda, çıktı dizesinde?,!ve bir boşluk karakterini (\s) tuttu.
Yukarıdaki normal ifadelerde ^ olumsuzlama anlamına gelirken, [] karakter sınıfını veya grubunu tanımlamak için kullanıldı.
Normal bir ifadedeki ASCII ve Unicode karakterlerinin önüne
\xve\ukaçış dizileri eklenir. Öte yandan,\pkaçış dizisi Unicode karakter kategorisini temsil eder.
PowerShell'deki bir dize dizisinden özel karakterleri kaldırmak için -replace operatörünü kullanın.
-replace Operatörünü kullanın:
$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$specialChars = '[^\w\s]+'
$cleanedStr = $strArray -replace $specialChars, ''
Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStr
"@ÇIKTI:
Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello WorldChar.IsLetterOrDigit Yöntemini Kullanma
PowerShell'de verilen dizeden özel karakterleri kaldırmak için Char.IsLetterOrDigit() yöntemini kullanın.
Char.IsLetterOrDigit() Yöntemini kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = ""
ForEach ($char in $str.ToCharArray()) {
if ([Char]::IsLetterOrDigit($char)) {
$cleanedStr += $char
}
}
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: Howareyouİki dize değişkeni oluşturduk; biri özel karakterler içeren bir dize değerine sahipti ($str), diğeri ise boş bir dizeyle ($cleanedStr) başlatıldı. Daha sonra ToCharArray() yöntemini kullanarak $str.ToCharArray() döngüsünü kullandık. >.
Döngünün içinde, $char ile temsil edilen geçerli karakterin veya harfi olup olmadığını kontrol etmek için IsLetterOrDigit() yöntemiyle birlikte if ifadesini kullandık. rakam. Öyle olsaydı, özel karakterleri etkili bir şekilde atlamak için += operatörünü kullanarak $cleanedStr'i $char ile ekledik. Son olarak, orijinal ve güncellenmiş dizeyi konsola yazdırmak için Write-Host cmdlet'ini kullandık.
Çıkış dizenizde boşluk karakterlerini korumak için aşağıda gösterildiği gibi Char.IsWhiteSpace() yöntemini kullanın.
IsLetterOrDigit()/IsWhiteSpace() Yöntemlerini kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = ""
ForEach ($char in $str.ToCharArray()) {
if ([Char]::IsLetterOrDigit($char) -or [Char]::IsWhiteSpace($char)) {
$cleanedStr += $char
}
}
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youPowerShell kullanarak bir dize dizisinden özel karakterleri kaldırmak için aşağıdaki kod örneğine bakın.
IsLetterOrDigit()/IsWhiteSpace() Yöntemlerini kullanın:
$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$cleanedStrArray = @()
foreach ($string in $strArray) {
$cleanedStr = ""
foreach ($char in $string.ToCharArray()) {
if ([Char]::IsLetterOrDigit($char) -or [Char]::IsWhiteSpace($char)) {
$cleanedStr += $char
}
}
$cleanedStrArray += $cleanedStr
}
Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStrArray
"@ÇIKTI:
Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello WorldBu örnek, bir dizi diziden özel karakterleri kaldırmak için kullanılan son örneklere benzer. Dış döngü, dize dizisi ($strArray) üzerinde yinelenirken, iç döngü, $string.ToCharArray().
İç döngü içinde if ifadesini IsLetterOrDigit() ve IsWhiteSpace() yöntemleriyle kullandık. Bu yöntemler geçerli karakteri ($char) aldı ve bunun harf mi, rakam mı yoksa boşluk mu olduğunu belirledi. Eğer öyleyse, += operatörünü kullanarak $cleanedStr değişkeniyle birleştirildi.
İç döngü bittiğinde, $cleanedStr dış döngüdeki += operatörü kullanılarak $cleanedStrArray'a eklendi. Son olarak, orijinal ve güncellenmiş dize dizisini PowerShell konsolunda görüntülemek için Write-Host'u kullandık.
String.Join() Yöntemini Kullanma
PowerShell'deki giriş dizesinden özel karakterleri kaldırmak için String.Join() yöntemini kullanın.
String.Join() Yöntemini kullanın:
$str = "How #$%are ^&*you?@!"
$cleanedStr = [String]::Join('',
($str.ToCharArray() |
Where-Object {
$_ -match '\w|\s'
}))
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@ÇIKTI:
Original String: How #$%are ^&*you?@!
Cleaned String: How are youİki argüman alan String.Join() yöntemini kullandık. İlki boş dizeydi. İkinci argüman için, ToCharArray() kullanarak dizeyi karakter dizisine dönüştürdük ve onu Where-Object cmdlet'ine aktardık.
Karakter dizisi üzerinde yinelenen bu cmdlet, -match operatörünü kullanarak geçerli karakteri ($_) \w|\s modeliyle eşleştirdi ve boş bir dize (ilk argüman) kullanarak bunları birleştirdi. \w|\s modelinde, \w kelime karakteriyle eşleşirken, \s bir boşluk karakteriyle eşleşiyordu. Son olarak sonuçları konsolda görüntülemek için Write-Host cmdlet'ini kullandık.
PowerShell'deki bir dize dizisinden özel karakterleri kaldırmak için String.Join() yöntemini kullanın.
String.Join() Yöntemini kullanın:
$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$cleanedStrArray = @()
ForEach ($string in $strArray) {
$cleanedStrArray += [String]::Join('',
($string.ToCharArray() |
Where-Object {
$_ -match '\w|\s'
}))
}
Write-Host @"
Original String: $strArray
Cleaned String: $cleanedStrArray
"@ÇIKTI:
Original String: How #$%are ^&*you?@! Hello $&World
Cleaned String: How are you Hello WorldBu kod pasajı sonuncuya benzer, ancak $strArray üzerinde döngü yapmak için ForEach'i kullandık ve temizlenen dizeleri $cleanedStr'de sakladık sıralamak.
Bunların hepsi PowerShell'in String'den özel karakterleri kaldırmasıyla ilgili.
