2016-12-22 9 views
1

正規表現を使用して文字列をフォーマットするには、何らかの助けが必要です。私は、(33,2)、(44,2)、(0,11)正規表現を使用して条件付き置換

私は、次の

にこの文字列を再フォーマットする必要がありタイプ

の文字列を持っています(2)、(2)、(0,11)

つまり、最後のオカレンス以外の入力から(\\([[:digit:]]+\\,)を削除します。

私は次のコードを試しましたが、すべての出現を置き換えます。

#include <iostream> 
#include <string> 
#include <regex> 

int main() 
{ 
    std::string s ("(32,33),(63,22),(22,1)"); 
    std::regex e ("[[:digit:]]+\\,"); 
    std::string result; 

    std::regex_replace (std::back_inserter(result), s.begin(), s.end(), e, "$2"); 
    std::cout << result; 

    return 0; 
} 

私は、私はこれを成し遂げるためにstd::sregex_iteratorを使用する必要があるが、これを理解することができていないことを理解しています。

すべてのサポートをよろしくお願いします。

+1

uがこれをしたいですか? https://regex101.com/r/poo4t4/1 –

答えて

1

あなたは彼らが(と続いている場合にのみ、これらの数字に一致することがあります。

[[:d:]]+,(?=.*\() 

詳細

  • [[:d:]]+から1桁以上
  • , - コンマ
  • (?=.*\\() - 正の先読みにはが必要です改行文字以外の0以上の文字の後に。

ここで肯定先読みは、それらが文字列の末尾の数字1+ + )で続いている場合は桁+ ,のすべての一致を失敗するnegtive (?![[:d:]]+\\)$)先読みに置き換えることができます。

C++ demoを参照してください:

#include <iostream> 
#include <string> 
#include <regex> 

int main() 
{ 
    std::string s ("(32,33),(63,22),(22,1)"); 
    std::regex e ("[[:d:]]+,(?=.*\\()"); 
    std::string result; 

    std::regex_replace (std::back_inserter(result), s.begin(), s.end(), e, "$2"); 
    std::cout << result; 

    return 0; 
} 
+0

ありがとうございます。それは完璧に働いた。私はチェックする条件として "(?=。* \\()"を使用するとは思わなかった。初心者の問題.. :) – wrongElk

関連する問題