2014-10-28 1 views
0

내가 XML 파일은 다음과 같이 포맷 한 일치 다음 몇 가지를 건너, 태그를 일치하도록정규식 다시

나는 사이의 태그에서 다음 정규식

(?si)<FirstName>(.*?)</FirstName>.*?<CompanyName>(.*?)</CompanyName>\s*<EmailAddress>(.*?)</EmailAddress>' 

그러나, 이것은 또한 반환 모든 것을 사용하고

Foo Bar,Foo,[email protected] 
Name,User2,[email protected] 
FSds,Blah,[email protected] 

FirstNameCompanyName

내가 뭘 잘못하고 있니?

+0

왜이 작업을 수행하는 데 파서를 고려하지 않습니까? – hwnd

+0

마감일로 인해이 신속하고 더러운 접근 방식이 필요합니다. P 클라이언트는 왕이다. 모든 것 :-) – Pr0no

+0

[아니오, 알지 못합니다] (http://stackoverflow.com/a/1732454/1630171) . –

답변

4

왜 XML 처리를 사용하지 않습니까?

C:\PS> $xml = [xml]@' 
>>> <Users> 
>>> <User> 
>>> <FirstName>Foo Bar</FirstName> 
>>> <LastName>Blah</LastName> 
>>> <OtherStuff>...</OtherStuff> 
>>> <More>...</More> 
>>> <CompanyName>Foo</CompanyName> 
>>> <EmailAddress>[email protected]</EmailAddress> 
>>> </User> 
>>> </Users> 
>>> '@ 
C:\PS> "$($xml.Users.User.FirstName), $($xml.Users.User.CompanyName), $($xml.Users.User.EmailAddress)" 
Foo Bar, Foo, [email protected] 

전체 XML 문서를 표시하지 않았으므로 최상위 노드를 추측하고 있습니다. XML 문서의 구조에 따라 조정해야합니다. , 당신이 큰 파일의 경우

$String = @' 
<User> 
<FirstName>Foo Bar</FirstName> 
<LastName>Blah</LastName> 
<OtherStuff>...</OtherStuff> 
<More>...</More> 
<CompanyName>Foo</CompanyName> 
<EmailAddress>[email protected]</EmailAddress> 
</User> 
'@ 

$regex = @' 
(?ms).+?<FirstName>(.+?)</FirstName>.*? 
<CompanyName>(.+?)</CompanyName>.*? 
<EmailAddress>(.+?)</EmailAddress>.+? 
'@ 

$string -match $regex > $null 
$matches[1..3] -join ',' 



Foo Bar,Foo,[email protected] 

을 당신이 한 번에 모든 것을 읽을 수 없다 :

+0

이것은 빠르고 쉬운 접근 방법입니다. – Matt

0

나는 당신이 여기 - 문자열을 구축 할 경우 여러 줄 정규식 쉽게 할 수 있습니다 발견 닫는 태그를 구분 기호로 사용할 수 있습니다.

관련 문제