2011-09-17 1 views
-1

正規表現で文字列からタグやコンテンツの複数の出現箇所を検索と置換:iPhone - 私はこの1つのように複数のタグを持つファイル(のは可変文字列を言わせて)持って

<Tag><minitag>40.23,12.7</minitag></Tag> 

を私がしたいですこの1つは数分のカップルで、この目標を達成できない場合

<Title>some hard text</Title><Value>40.23</Value><Title>some other hard text</Title><Value>12.7</Value> 

[xmlString replaceOccurrencesOfString:@"???????" withString:@"???????" options:NSRegularExpressionSearch range:NSMakeRange(0, [xmlString length])];
や他の方法を使用して、この1で各1を交換します。もちろん

、ファイルは、他の多くのもの、数字、コンマ、...

私はそれをどのように行うことが含まれていますか?

答えて

0

はそれを見つけた:

[xmlString replaceOccurrencesOfString:@"<Tag><miniTag>([0-9.-]*){1},([0-9.-]*){1}</miniTag></Tag>" withString:@"<Title>Some hard text</Title><Value>$1</Value><Title>Some other hard text</Title><Value>$2</Value>" options:NSRegularExpressionSearch range:NSMakeRange(0, [xmlString length])]; 
0

dunno約regexp、私が見ることができる最も効率的な方法 - xmlを解析して新しいものを作成し、そこに数字を置いた後に数字を抽出する。

+0

ありません:-)ああああああ、本当に?もっと真剣に、数分で抽出して書き込むコーディングに役立つものがありますか? – Oliver

1

数分でxmlを書き換えることができるかどうかは、xmlのサイズに依存しますが、計算時間で数分かかることがあります。

単純な文字列の置換でこれを達成するとは思わないでしょう。私はXMLを解析する必要があると思うし、解析するので、文字列を区切り(コンマなどで区切って)、必要に応じて新しいXML文書を書いてください。

ここでは、使用した文字列を解析する簡単な例を示します。もちろん、それは現実にはもっと複雑だ場合は、カスタム文字列の解析が複雑になる:

- (void) DoWork 
{ 
    NSString *xmlSource = @"<Tag><minitag>40.23,12.7</minitag></Tag>"; 
    NSData *data = [xmlSource dataUsingEncoding:NSUTF8StringEncoding]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName caseInsensitiveCompare:@"minitag"] == NSOrderedSame) 
    { 
     NSLog(@"minitag"); 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"chars:%@", string); 
    NSArray *components = [string componentsSeparatedByString:@","]; 
    for (NSString *comp in components) 
    { 
     NSLog(@"comp:%@", comp); 

     // This outputs: 
     // minitag 
     // chars:40.23,12.7 
     // comp:40.23 
     // comp:12.7  

     // 
     // At this point, you have the parts parsed, maintain an NSXmlDocument 
     // (or other xml writer) 
     // that you are writing to as you're parsing this 
     // Add your constant string elements and your sub data elements as you go 
     // 
    } 
} 
+0

xmlの作成面で助けが必要な場合や、この部分が明確でない場合は、サンプルの部分文字列がシンプルなので、構文解析はかなり簡単です:) – bryanmac

+0

答えがありがとう、FYI、私の答えを見てください。それは確かに可能でした。 – Oliver

関連する問題