많은 Excel 스프레드 시트의 이름과 스프레드 시트에서 링크 된 파일의 이름을 나열하는 텍스트 파일이 있습니다. 간략한 형태PowerShell에서 정규 표현식을 사용하여 반복 하위 시리즈 일치
그것은 다음과 같다 :이 예에서
"Parent
File1.xls"
Link: ChildFileA.xls
Link: ChildFileB.xls
"ParentFile2.xls"
"ParentFile3.xls"
Blah
Link: ChildFileC.xls
Link: ChildFileD.xls
More Junk
Link: ChildFileE.xls
"Parent
File4.xls"
Link: ChildFileF.xls
, ParentFile1.xls ParentFile2.xls가 더 삽입 된 링크를 가지고 있지 ChildFileA.xls ChildFileB.xls 및 링크를 포함하고있다 ParentFile3.xls 3 개의 임베디드 링크가 있습니다.
나는 다음과 같은 형식의 텍스트 파일 생성 출력을 구문 분석 PowerShell의 정규 표현식을 쓰기 위해 노력하고 있어요 :
ParentFile1.xls:ChildFileA.xls,ChildFileB.xls
ParentFile3.xls:ChildFileC.xls,ChildFileD.xls,ChildFileE.xls
etc
작업은 텍스트 파일이 쓰레기를 많이 포함되어 있다는 사실에 의해 복잡 각 줄 사이에는 부모가 항상 자식을 가질 수는 없습니다. 또한 단일 파일 이름이 여러 줄을 넘길 수 있습니다. 그러나 부모와 자식 파일 이름이 항상 명확하게 구분되어 있기 때문에 소리가 나쁘지는 않습니다 (따옴표가있는 부모와 접두사가있는 자식 :).
$content = [string]::Join([environment]::NewLine, (Get-Content C:\Temp\text.txt))
$regex = [regex]'(?im)\s*\"(.*)\r?\n?\s*(.*)\"[\s\S]*?Link: (.*)\r?\n?'
$regex.Matches($content) | %{$_.Groups[1].Value + $_.Groups[2].Value + ":" + $_.Groups[3].Value}
위의 예제를 사용하여 그것을 출력 :
ParentFile1.xls:ChildFileA.xls
ParentFile2.xls""ParentFile3.xls:ChildFileC.xls
ParentFile4.xls:ChildFileF.xls
이 두 가지 문제가 있습니다 다음과 같이 내가 사용하고
파워 쉘 코드입니다. 첫째, 자식이없는 부모가 처리 될 때마다 개행 문자 대신에 ""를 포함합니다. 그리고 가장 중요한 두 번째 문제는 각 부모에 대해 단 한 명의 자녀 만 표시된다는 것입니다. 나는 어떻게 든 재귀 적으로 각 부모에 대해 존재하는 여러 자식 링크를 캡처하고 표시해야한다고 생각하지만 정규 표현식으로이 작업을 수행하는 방법에 관해 완전히 이해하기 어렵습니다.
에이미 (Amy) 도움을 주시면 대단히 감사하겠습니다. 이 파일에는 수천 줄의 수천이 포함되어 있으며 수동 처리는 옵션이 아닙니다.
Eww, 어떤 형식입니까? 실제로 얼마나 엄격합니까? 현재 정규 표현식은 하나, 세 개 이상이 아닌 두 줄로 분리 된 상위 파일 이름 만 처리합니다. 그게 문제 야? 또한 정크가 따옴표를 포함 할 수 있습니까 (예 : 단일 부모의 파싱을 언제 종료 할 수 있는지). 나는 그것이 정규식으로 할 수 있을지도 모르지만, 더 쉽게 할 수 있다고 생각한다. 정규 표현식 부분이 요구 사항인지 구현 아이디어인가? –
필자가 지금까지 취한 데이터 샘플에서는 상위 파일 이름이 두 줄로 만 나뉘어 지지만 이론적으로는 3으로 확장 될 가능성이 있음을 알 수 있습니다. 정크에는 따옴표가 포함되지 않습니다. 정규식은 요구 사항이 아니라 구현 아이디어입니다. – Hinch