2014-06-11 2 views
0

문자열의 여러 가능성을 대체 (제거)해야하고이 작업을 한 줄로 수행하려고합니다. 물건). 예를 들어, 각기 다른 레벨의 직위를 가진 많은 사용자가 있습니다 (Manager 1, Manager 2 등). 일부는 숫자로 끝나지만 일부는 II, III, IV 등으로 끝납니다 (로마 숫자). 숫자를 제거하려면 다음을 사용합니다 (예 : 배열에서) :PowerShell에서 regexes를 사용하여 문자열에서 텍스트 제거

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace " \d+$" 

그리고 위대한 작품입니다. 모든 작업 제목에서 숫자를 제거합니다. 나는 또한 타이틀 케이스를하고 있기 때문에, 직위가 III 일 때, 적절한 케이스를 사용하여 Iii로 끝납니다. 나는 다음과 같은 오류 메시지가 얻을

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace " \d+$","ii$","iii$","iv$" 

:하지만, 내가하려고 할 때 위에서 더 추가

그래서
The -ireplace operator only permits 2 elements on the right-hand side, not 4 

내가이 일을하는 방법을 연구하고 한을 내가 정규식에 대한 책을 읽은 유지 대답은, 그리고 이것은 간단한 대답이지만, 나는이 상황에서 정규 표현식을 만드는 법을 이해하지 못하는 것 같습니다. 나는 regexes에 대해 많은 것을 읽고 시도해 왔지만 그것을 얻을 수없고 도움이 필요하지 않다. 위의 명령을 사용하고 제거하려고하는 항목을 제거 (아무 것도 대체하지 않는) 방법이 있습니까? 아니면 어려운 한계가 있으며 다른 것을 알아 내야합니까?

+0

@AlanMoore - 나는 일부 수정 사항을 이해하지 않습니다. 그들은 내 것과 동일합니다. 일부는 현재 코드 형식으로되어 있습니다 (대문자 변경이 있음). 감사합니다. 그러나 다른 것은 변경되지 않았습니다. 오, 피드백에 감사드립니다. – STGdb

답변

3

문자 클래스 사용은 어떻습니까? 에 던져 일부 교대로

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace '\s[0-9ivx]+$' 

또는 :

-Replace '\s(?:\d+|[ivx]+)$' 
+0

'... -replace'(\ d + | iii? | iv) $ ''와 같이 번갈아 가면서 나에게 더 나은 선택 인 것 같습니다. –

+0

둘 다 조금이라도 좋을까요? (업데이트 됨) – mjolinor

+0

@mjolinor - "(일부 변경"버전을 사용하여) 훌륭하게 작업했습니다. 감사합니다. (@AnsgarWiechers) - 나는 그것을 시도했지만 "더 나은 선택"을 사용하여 배열의 모든 항목을 업데이트하는 것으로 보였다. (추측 하건데 PS는 배열의 모든 항목과 일치한다고 생각한다). – STGdb

관련 문제