2

問題があり、これを行う方法がわかりません(6時間またはグーグルの後)

「ファイル名」という名前の文字列に次のテキストが含まれています:「Aachen-Merzbrück EDKA\r\r\nVerkehr」 この部分「Aachen-Merzbrück EDKA」のみを取得するために正規表現を使用したいのですが、できません....

ここに私のコード:

NSString *expression = @"\\w+\\s[A-Z]{4}";

NSError *error = NULL;

NSRegularExpression *regex = [NSRegularExpression         regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error];

NSString *noAirportString = [regex stringByReplacingMatchesInString:filename options:0 range:NSMakeRange(0, [filename length]) withTemplate:@""];

編集 :

これはうまくいきます: \S+\s+[AZ]{4}

しかし今、「Aachen-Merzbrück EDKA\r\r\nVerkehr」からこの「Aachen-Merzbrück」EDKAだけを取得する方法

NSRegularExpression を使用した正規表現は、同じ文字列を返します ....

4

2 に答える 2

0

おかげでうまくいきましたが、私はこれを使用しています。私の場合はうまく機能します:

NSString *expression = @"\\S+\\s+[A-Z]{4}";
于 2013-10-09T08:55:10.990 に答える
0

あなたの質問にはいくつかの問題があります:

  1. 都市名の文字を一致させる必要はありません - 周りには常に奇妙な文字 (ハイフン、アポストロフィなど) があります。追加のセキュリティとして、テキストの最初の「行」を ICAO コードのテストと一致させることができます。
  2. stringByReplacingMatchesInString:実際に使用すると、保持したい空港名(およびICAOコード)が削除されます。
  3. stringByReplacingMatchesInString:はハッキーです (物事を削除するため、正規表現を「負」にする必要があるため) ショートカットは時々機能しますが (私は自分で使用します)、物事を混乱させるリスクがあります-そして将来の読者.

そうは言っても、いくつかの変更で修正されます。

NSString *filename = @"Aachen-Merzbrück EDKA\r\r\nVerkehr";

// Match anything from the beginning of the line up to a space and 4 upper case letters.
NSString *expression = @"^.+\\s[A-Z]{4}$";

NSError *error = NULL;

//Make sure ^ and $ match line endings, 
//and make it case sensitive (the default) to explicitly 
//match the 4 upper case characters of the ICAO code
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionAnchorsMatchLines error:&error];

NSArray *matches = [regex matchesInString:filename
                                  options:0
                                    range:NSMakeRange(0, [filename length])];

// Check that there _is_ a match before you continue
if (matches.count == 0) {
    // Error
}

NSRange airportNameRange = [[matches objectAtIndex: 0] range];
NSString *airportString = [filename substringWithRange: airportNameRange];
于 2013-10-08T15:22:55.657 に答える