2015-12-25 31 views
0

我有這個xml文件如何匹配包含在正則表達式的任何符號(包括新線)的關鍵字

<?xml version="1.0" encoding="UTF-8"?> 
<?mso-infoPathSolution solutionVersion="1.0.0.182" productVersion="15.0.0" PIVersion="1.0.0.0" href="http://sp01/hp/Therapy/Forms/template.xsn" name="urn:schemas-microsoft-com:office:infopath:Therapy:-myXSD-2013-03-01T10-07-30" ?> 
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.3"?> 
<my:myFields 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" 
     xmlns:ma="http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes" 
     xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields" 
     xmlns:q="http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields" 
     xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" 
     xmlns:dms="http://schemas.microsoft.com/office/2009/documentManagement/types" 
     xmlns:xhtml="http://www.w3.org/1999/xhtml" 
     xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2013-03-01T10:07:30" 
     xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" 
     xml:lang="en-us"> 
    <my:PatientID>1</my:PatientID> 
    <my:Name>name</my:Name> 
    <my:Age>29.0000000000000</my:Age> 
    <my:Gender>gender</my:Gender> 
    <my:Date>2015-12-09</my:Date> 
    <my:group1> 
     <my:group2> 
      <my:field1>1</my:field1> 
      <my:PName>pname</my:PName> 
      <my:PPrice>10000.0000000000</my:PPrice> 
      <my:field11 xsi:nil="true"></my:field11> 
     </my:group2> 
     <my:group2> 
      <my:field1>9</my:field1> 
      <my:PName>pname 
      </my:PName> 
      <my:PPrice>10000.0000000000</my:PPrice> 
      <my:field11 xsi:nil="true"></my:field11> 
     </my:group2> 
    </my:group1> 
    <my:field4></my:field4> 
    <my:field5></my:field5> 
    <my:Status>false</my:Status> 
    <my:Confirm>false</my:Confirm> 
    <my:field6></my:field6> 
    <my:field7></my:field7> 
    <my:field8></my:field8> 
    <my:TPrice>20000</my:TPrice> 
    <my:field12></my:field12> 
    <my:field13></my:field13> 
    <my:insurance>1</my:insurance> 
    <my:Partner>partner</my:Partner> 
    <my:Doctor>doctor</my:Doctor> 
</my:myFields> 

之間的字符串,我想用正則表達式來過濾這一點,並獲取標記的唯一值,即

<my:group1> 
    <my:group2> 
     <my:field1>1</my:field1> 
     <my:PName>pname</my:PName> 
     <my:PPrice>10000.0000000000</my:PPrice> 
     <my:field11 xsi:nil="true"></my:field11> 
    </my:group2> 
    <my:group2> 
     <my:field1>9</my:field1> 
     <my:PName>pname 
     </my:PName> 
     <my:PPrice>10000.0000000000</my:PPrice> 
     <my:field11 xsi:nil="true"></my:field11> 
    </my:group2> 
</my:group1> 

我試圖與此正則表達式

<my:group1>(.*\r*\n*)*<\/my:group1> 

過濾,但好像我的走錯方向。如何過濾我的關鍵字之間的任何字符,包括新行?

+0

http://stackoverflow.com/questions/8303488/regex-to-match-any-character-including-new-lines – Ian

+0

@Ian我試過,但沒有給出正確的結果 – Carmine

回答

2

你可以使用這個表達式(demo):

<my:group1>(.|\n|\r)*<\/my:group1> 

請,請,請使用XML解析器解析XML,而不是正則表達式。

+1

我只是想減少所有其他信息,離開group1部分,但你的建議是有道理的:) – Carmine

1

如何過濾我的關鍵字之間的任何字符,包括新行? example -

由於.字符不包括換行符,可以使之匹配所有的字符,包括換行符使用s標誌。

/<my:group1>(.*)<\/my:group1>/s 

或者,你也可以使用一個字符集,以匹配所有空格字符(\s)和所有非空白字符(\S),這將基本上是匹配的一切 - example

<my:group1>([\s\S]*)<\/my:group1> 
相關問題