0

私は文字列を持っています:"My goal today is to work out 30 minutes [Last update: May 20, 2013 by Joe Smith] and eat healthy"

誰かが部分文字列を抽出するNSRegularExpressionObjective -Cで作成してください:

[Last update: May 20, 2013 by Joe Smith]

角かっこで囲まれた文字列の部分を基本的に消去し[]て、最後の文字列が次のようになるようにしたいと思います。

正しい正規表現は次のとおりです。

NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:@"[Last Update:*]" 
options:NSRegularExpressionCaseInsensitive error:&error];

で始まる正規表現"\b"や、角かっこをエスケープする正規表現をオンラインで見たこと "\[Last update:*\]" があります。

4

2 に答える 2

3

シェルグロブと呼ばれるものとして使用しようとしているようです。*これは、「ゼロ個以上の任意の文字に一致する」ことを意味します。ただし、シェル グロブは正規表現とは異なり、正規表現のコンテキストでは、*実際には「先行する 0 個以上のアトムに一致する」ことを意味します。あなたの場合、これは「ゼロ回以上の出現に一致する」ことを意味します:が、これはあなたが望むものではありません。

あなたがしたいことは

@"\\[Last Update:[^]]+\\] ?"

から始めたことに注意してください\\[。ここでの「実際の」正規表現は\[; Objective-C 文字列内で作業しているため、バックスラッシュをエスケープするためにバックスラッシュを追加する必要がありました。この\[シーケンスは、リテラルの左角括弧と一致します。(その文字は正規表現で特別な意味を持つため、テキストに実際の文字がある場合はエスケープする必要があり[ます。) 同じことが\\]最後の にも当てはまります。

このシーケンス[^]]+は、「 以外の任意の文字]に一致し、できるだけ多く一致する」ことを意味します。最後に、?末尾の (スペースの後に疑問符が続く) は、正規表現がスペースに一致することを意味します。これにより、一致したテキストを削除するときに 2 つのスペースが連続して表示されるのを防ぐことができます。(入力の形式によっては、?代わりに を式の先頭に移動したい場合があります。)

Objective-C の正規表現に関する詳細情報が必要な場合は、NSRegularExpression のドキュメントを参照してください。

于 2013-05-22T20:06:02.527 に答える
2

次のパターンを使用できます。

\s*\[[^\]]+\]

括弧内のデータとその前のスペースを返します。

その後、これらのリンクをたどってこれらの文字列を置き換える必要があります。

NSRegularExpression の例 (NSTextCheckingResult の例を参照)

StringByReplaceingOccurancesOfStringまたはstringByReplaceingCharactersInRangeの例

于 2013-05-22T20:07:39.097 に答える