N回まで繰り返されるグループをキャプチャする方法は?

tbop

文字列内の数字のチェーンをキャプチャしたいのですが、最大3回までです。

その後の数字のチェーンは無視する必要があります。例えば:

T441_S45/1 => 441 45 1 007_S4 => 007 4 41_445T02_74 => 41 445 02

試しました(\d+){1,3}が、うまくいかないようです...

ヒントはありますか?

WiktorStribiżew

任意の数の非数字と文字列の残りの部分で区切られた最初の3つの数字のチャンクを照合してキャプチャし、それらのグループへの後方参照に置き換えることができます。

^\D*(\d+)(?:\D+(\d+))?(?:\D+(\d+))?.*

または、文字列を複数行にすることができる場合は、

^\D*(\d+)(?:\D+(\d+))?(?:\D+(\d+))?[\s\S]*

置換文字列はのようになります$1 $2 $3

詳細

  • ^ -文字列の開始
  • \D* -0以上の数字以外
  • (\d+) -グループ1:1桁以上
  • (?:\D+(\d+))? -オプションの非キャプチャグループマッチング:
    • \D+ -1桁以上の数字以外
    • (\d+) -グループ2:1桁以上
  • (?:\D+(\d+))? -別のオプションの非キャプチャグループマッチング:

    • \D+ -1つ以上の数字以外
    • (\d+) -グループ3:1つ以上の数字
  • [\s\S]* -文字列の残りの部分。

正規表現のデモを参照してください

C ++デモ

#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::vector<std::string> strings;
    strings.push_back("T441_S45/1");
    strings.push_back("007_S4");
    strings.push_back("41_445T02_74");

    std::regex reg(R"(^\D*(\d+)(?:\D+(\d+))?(?:\D+(\d+))?[\s\S]*)");
    for (size_t k = 0; k < strings.size(); k++)
    {
        std::cout << "Input string: " << strings[k] << std::endl;
        std::cout << "Replace result: " 
                     << std::regex_replace(strings[k], reg, "$1 $2 $3") << std::endl;
    }
    return 0;
}

出力:

Input string: T441_S45/1
Replace result: 441 45 1
Input string: 007_S4
Replace result: 007 4 
Input string: 41_445T02_74
Replace result: 41 445 02

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonで繰り返されるグループをキャプチャする

分類Dev

javaregex-繰り返されるグループをキャプチャする

分類Dev

グループを繰り返しキャプチャする方法は?

分類Dev

繰り返されるグループのキャプチャ

分類Dev

Python正規表現で繰り返されるグループをキャプチャする

分類Dev

logstash(5.4.0)grokで繰り返されるパターンをキャプチャする方法は?

分類Dev

GOで繰り返しグループをキャプチャする

分類Dev

繰り返される任意のキャプチャグループ

分類Dev

繰り返される名前付きグループのキャプチャ

分類Dev

繰り返しキャプチャグループ内のすべてのグループのグループ番号をキャプチャする方法

分類Dev

正規表現は、繰り返されるグループの最後の発生のみをキャプチャします

分類Dev

繰り返し番号グループをキャプチャするSed

分類Dev

正規表現は繰り返されるフレーズをキャプチャします

分類Dev

繰り返しキャプチャされた画像を回避する方法

分類Dev

キャプチャグループを繰り返すにはどうすればよいですか?

分類Dev

正規表現を使用して「複数」の繰り返しグループをキャプチャする方法

分類Dev

繰り返される単語をキャプチャするための正規表現(テキスト内で2回以上の繰り返し)

分類Dev

繰り返しキャプチャグループを作成するにはどうすればよいですか?

分類Dev

複数の繰り返しグループをキャプチャするにはどうすればよいですか?

分類Dev

正規表現で繰り返しグループをキャプチャする

分類Dev

正規表現キャプチャグループの後、次の繰り返し一致までのみすべてのテキストを一致させるにはどうすればよいですか?

分類Dev

Perlでキャプチャされたグループを取得する方法

分類Dev

繰り返される単語間のグループをキャプチャするための正規表現

分類Dev

REGEX繰り返しグループの異なるセットをキャプチャする

分類Dev

C ++で正規表現のトークン化を使用して繰り返されるパターンをキャプチャする方法

分類Dev

グループのすべての繰り返しをキャプチャする

分類Dev

正規表現:繰り返しキャプチャグループのすべての個別インスタンスをキャプチャする

分類Dev

このパターンがPythonで繰り返されるすべての文字をキャプチャできないのはなぜですか?

分類Dev

繰り返される任意の文字をキャプチャグループと照合するために追加の変数が必要なのはなぜ/どのようですか?

Related 関連記事

  1. 1

    Pythonで繰り返されるグループをキャプチャする

  2. 2

    javaregex-繰り返されるグループをキャプチャする

  3. 3

    グループを繰り返しキャプチャする方法は?

  4. 4

    繰り返されるグループのキャプチャ

  5. 5

    Python正規表現で繰り返されるグループをキャプチャする

  6. 6

    logstash(5.4.0)grokで繰り返されるパターンをキャプチャする方法は?

  7. 7

    GOで繰り返しグループをキャプチャする

  8. 8

    繰り返される任意のキャプチャグループ

  9. 9

    繰り返される名前付きグループのキャプチャ

  10. 10

    繰り返しキャプチャグループ内のすべてのグループのグループ番号をキャプチャする方法

  11. 11

    正規表現は、繰り返されるグループの最後の発生のみをキャプチャします

  12. 12

    繰り返し番号グループをキャプチャするSed

  13. 13

    正規表現は繰り返されるフレーズをキャプチャします

  14. 14

    繰り返しキャプチャされた画像を回避する方法

  15. 15

    キャプチャグループを繰り返すにはどうすればよいですか?

  16. 16

    正規表現を使用して「複数」の繰り返しグループをキャプチャする方法

  17. 17

    繰り返される単語をキャプチャするための正規表現(テキスト内で2回以上の繰り返し)

  18. 18

    繰り返しキャプチャグループを作成するにはどうすればよいですか?

  19. 19

    複数の繰り返しグループをキャプチャするにはどうすればよいですか?

  20. 20

    正規表現で繰り返しグループをキャプチャする

  21. 21

    正規表現キャプチャグループの後、次の繰り返し一致までのみすべてのテキストを一致させるにはどうすればよいですか?

  22. 22

    Perlでキャプチャされたグループを取得する方法

  23. 23

    繰り返される単語間のグループをキャプチャするための正規表現

  24. 24

    REGEX繰り返しグループの異なるセットをキャプチャする

  25. 25

    C ++で正規表現のトークン化を使用して繰り返されるパターンをキャプチャする方法

  26. 26

    グループのすべての繰り返しをキャプチャする

  27. 27

    正規表現:繰り返しキャプチャグループのすべての個別インスタンスをキャプチャする

  28. 28

    このパターンがPythonで繰り返されるすべての文字をキャプチャできないのはなぜですか?

  29. 29

    繰り返される任意の文字をキャプチャグループと照合するために追加の変数が必要なのはなぜ/どのようですか?

ホットタグ

アーカイブ