147

私は正規表現の初心者であり、次のような重複する連続する単語に「一致」する単一の正規表現を記述する方法がよくわかりません。

パリ。

それが関係しているわけではありません。

なぜ笑っている?私正規表現はそんなに悪いですか??

上記の太字の文字列すべてに一致する単一の正規表現はありますか?

4

14 に答える 14

187

次の正規表現を試してください。

\b(\w+)\s+\1\b

\bこれは単語境界で\1あり、最初のグループのキャプチャされた一致を参照します。

Regex101 の例はこちら

于 2010-05-12T21:55:01.513 に答える
29

この正規表現はより多くの状況を処理すると思います:

/(\b\S+\b)\s+\b\1\b/

テスト文字列の適切な選択は、http: //callumacrae.github.com/regex-tuesday/challenge1.htmlにあります。

于 2012-09-06T23:40:09.850 に答える
10

以下のREでこれを試してください

  • \b 単語単語境界の開始
  • \W+ 任意の単語文字
  • \1 個の同じ単語が既に一致しました
  • \b 単語の終わり
  • ()* もう一度繰り返す

    public static void main(String[] args) {
    
        String regex = "\\b(\\w+)(\\b\\W+\\b\\1\\b)*";//  "/* Write a RegEx matching repeated words here. */";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE/* Insert the correct Pattern flag here.*/);
    
        Scanner in = new Scanner(System.in);
    
        int numSentences = Integer.parseInt(in.nextLine());
    
        while (numSentences-- > 0) {
            String input = in.nextLine();
    
            Matcher m = p.matcher(input);
    
            // Check for subsequences of input that match the compiled pattern
            while (m.find()) {
                input = input.replaceAll(m.group(0),m.group(1));
            }
    
            // Prints the modified sentence.
            System.out.println(input);
        }
    
        in.close();
    }
    
于 2017-06-05T06:49:15.507 に答える
6

広く使用されている PCRE ライブラリは、このような状況を処理できます (ただし、POSIX 準拠の正規表現エンジンでは同じことはできません)。

(\b\w+\b)\W+\1
于 2010-05-12T21:55:46.693 に答える
4

これは、twitch ボットで重複するフレーズを削除するために使用する正規表現です。

(\S+\s*)\1{2,}

(\S+\s*)空白ではなく、空白の後に続く任意の文字列を探します。

\1{2,}次に、一致する文字列内でそのフレーズのインスタンスが 2 つ以上検索されます。同一のフレーズが 3 つあれば一致します。

于 2015-07-18T01:17:17.027 に答える
4

いいえ、それは不規則な文法です。使用できるエンジン/言語固有の正規表現があるかもしれませんが、それを行うことができる普遍的な正規表現はありません。

于 2010-05-12T21:53:15.507 に答える
2

Javascript の例: 良い部分は、これを行うために適応させることができます:

var doubled_words = /([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD]+)\s+\1(?:\s|$)/gi;

\b は単語境界に \w を使用します。\w は [0-9A-Z_a-z] に相当します。その制限を気にしないのであれば、受け入れられた答えは問題ありません。

于 2013-04-24T21:04:03.000 に答える
-1

重複する単語の大文字と小文字を区別しないチェックが必要な場合に使用します。

(?i)\\b(\\w+)\\s+\\1\\b
于 2016-08-16T15:55:45.050 に答える