2017-09-10 13 views
4

でキャプチャグループで文字列を置き換える私は、次の文字列を持っている:「@ [1484987415095898:274:4ページ]を」と私は名前をキャプチャしたいので、私はそれが思わ @\[[\d]+:[\d]+:(.*)] 正規表現次のように書いています私は以前の文字列をキャプチャグループ1に置き換える方法を理解するのに苦労しています。
すなわち
"Loremのイプサムの@ [1484987415095898:274:4ページ]ドロレス" - >
"Loremのイプサムの4ページドロレス"スウィフト3

注意が、私はしかしthis stack question を使用してキャプチャグループを取得する方法を説明しました、これは元の文字列をどのように見つけて置き換えたのでしょうか?

+1

可能な複製(https://stackoverflow.com/questions/42789953/swift-3-how-do-i-extract-captured-group-in-regular-expressions) – the4kman

+0

ここでグループを抽出するのではなく、それらを置き換える方法についてです。 –

答えて

5

最初のキャプチャグループでキャプチャされた内容を保持する置換逆参照である$1と完全一致を置き換える必要があります。

さらに、後でパターンを展開することを決定した場合、文字クラスの組合の誤解を避けるため、[\d]\dと書くことをお勧めします。また、最後に].*の欲張りのバリエーションを使用する場合)ではなく、最初に]に戻るには、.*?、遅延ドットマッチングを使用する方が安全です。しかし、それは実際の要件に依存します。

使用、次のいずれか:[?スウィフト3 - 私は正規表現でキャプチャグループを抽出するにはどうすればよい]の

let txt = "Lorem ipsum @[1484987415095898:274:Page Four] dolores" 
let regex = NSRegularExpression(pattern: "@\\[\\d+:\\d+:(.*?)\\]", options:nil, error: nil) 
let newString = regex!.stringByReplacingMatchesInString(txt, options: nil, range: NSMakeRange(0, count(txt)), withTemplate: "$1") 
print(newString) 
// => Lorem ipsum Page Four dolores 

または

let txt = "Lorem ipsum @[1484987415095898:274:Page Four] dolores" 
let newString = txt.replacingOccurrences(of: "@\\[\\d+:\\d+:(.*?)]", with: "$1", options: .regularExpression) 
print(newString) 
// => Lorem ipsum Page Four dolores 
+0

または単に 'newString = txt.replacingOccurrences of:":\\ [[\\ d] +:[\\ d] +:(。*)] ":" $ 1 "オプション:.regularExpression) ' – rmaddy

+0

@rmaddyええ、それは良い表記です、ありがとう。私はまだクリーナーであり、同じ行にいくつかのマッチがある場合には安全でなければならない私のパターンを好む。 –

+0

NSRegularExpression(多くのメリットがあります)を使いたい場合は、なぜ答えを変えるのですか? – rmaddy