문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인합니다.
저는 파워쉘을 공부하고 있습니다.문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인하는 방법을 알고 싶습니다.저는 파이썬에서도 같은 방법을 할 줄 압니다.코드는 다음과 같습니다.
any(substring in string for substring in substring_list)
PowerShell에 사용 가능한 유사한 코드가 있습니까?
저의 PowerShell 코드는 아래와 같습니다.
$a = @('one', 'two', 'three')
$s = "one is first"
$s를 $a로 검증하고 싶습니다.$a에 있는 문자열이 $s에 있으면 True를 반환합니다.파워쉘에서 가능합니까?
질문의 실제 변수를 사용하여 단순화하기:
$a = @('one', 'two', 'three')
$s = "one is first"
$null -ne ($a | ? { $s -match $_ }) # Returns $true
$a에 포함되지 않도록 $s 수정:
$s = "something else entirely"
$null -ne ($a | ? { $s -match $_ }) # Returns $false
(물론 같은 변수 이름을 사용하는 ChingNotCHING의 답변보다 약 25% 적은 문자입니다 :-)
($substring_list | %{$string.contains($_)}) -contains $true
당신의 외줄을 철저히 따라야 합니다.
PowerShell 버전 5.0+용
대신에.
$null -ne ($a | ? { $s -match $_ })
이 간단한 버전을 사용해 보십시오.
$q = "Sun"
$p = "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
[bool]($p -match $q)
이것은 돌아옵니다.$True
만약에 부현이라면$q
문자열 배열에 있습니다.$p
.
다른 예:
if ($p -match $q) {
Write-Host "Match on Sun !"
}
6년 동안 아무도 이렇게 간단하고 읽을 수 있는 답을 주지 않았다는 것이 놀랍습니다.
$a = @("one","two","three")
$s = "one1 is first"
($s -match ($a -join '|')) #return True
따라서 배열을 수직 막대 "|"를 사용하여 문자열에 삽입하면 됩니다. 이것이 정규 표현식의 교대("OR" 연산자)이기 때문입니다.https://www.regular-expressions.info/alternation.html https://blog.robertelder.org/regular-expression-alternation/
또한 허용된 답변은 정확하게 일치하는 내용을 검색하지 않습니다.정확한 일치를 원하시면 \b(단어 경계) https://www.regular-expressions.info/wordboundaries.html 를 이용하시면 됩니다.
$a = @("one","two","three")
$s = "one1 is first"
($s -match '\b('+($a -join '|')+')\b') #return False
마이클 소렌스(Michael Sorens)의 코드 답변은 부분 서브스트링 일치의 함정을 피하기 위해 가장 효과적입니다.단지 약간의 정규장 수정만 필요합니다.만약 당신이 그 끈을 가지고 있다면.$s = "oner is first"
, 'one'이 'oneer'와 일치하므로 코드가 true로 반환됩니다(PowerShell의 일치는 두 번째 문자열에 첫 번째 문자열이 포함됨을 의미함).
$a = @('one', 'two', 'three')
$s = "oner is first"
$null -ne ($a | ? { $s -match $_ }) # Returns $true
단어 경계 '\b'에 일부 regex를 추가하면 ron 'oneer'는 false를 반환합니다.
$null -ne ($a | ? { $s -match "\b$($_)\b" }) # Returns $false
(나는 그것이 오래된 스레드라는 것을 알고 있지만 적어도 미래에 이것을 보는 사람들을 도울 수 있을 것입니다.)
uses -match라는 응답이 있을 경우 오답이 발생합니다.예: $a-match $b가 ""인 경우 $a-match $b는 거짓 음성을 생성합니다.
사용하는 것이 더 좋은 답일 것입니다.포함 - 그러나 대소문자를 구분하므로 비교하기 전에 모든 문자열을 대문자 또는 소문자로 설정해야 합니다.
$a = @('one', 'two', 'three')
$s = "one is first"
$a | ForEach-Object {If ($s.toLower().Contains($_.toLower())) {$True}}
$True를 반환합니다.
$a = @('one', 'two', 'three')
$s = "x is first"
$a | ForEach-Object {If ($s.toLower().Contains($_.toLower())) {$True}}
반환 없음
원한다면 $True 또는 $False를 반환하도록 조정할 수 있지만, 위의 IMO가 더 쉽습니다.
다음과 같은 문자열을 포함하는 문자열의 하위 집합을 선택할 수 있습니다.
$array = @("a", "b")
$source = @("aqw", "brt", "cow")
$source | where {
$found = $FALSE
foreach($arr in $array){
if($_.Contains($arr)){
$found = $TRUE
}
if($found -eq $TRUE){
break
}
}
$found
}
한 가지 방법:
$array = @("test", "one")
$str = "oneortwo"
$array|foreach {
if ($str -match $_) {
echo "$_ is a substring of $str"
}
}
언급URL : https://stackoverflow.com/questions/31603128/check-if-a-string-contains-any-substring-in-an-array-in-powershell
'source' 카테고리의 다른 글
angular.js - 유럽 표기법의 10진수 (0) | 2023.11.06 |
---|---|
Oracle 연결 압축? (0) | 2023.11.06 |
html 페이지의 div에 외부 웹페이지를 로드하는 방법 (0) | 2023.11.06 |
ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다. (0) | 2023.11.01 |
인라인 자바스크립트 연기하는 방법? (0) | 2023.11.01 |