0

2 種類の文字を含むテキストから文字列を抽出しようとしています。文字は|#であり、テキストは外部ソースからのものです。

例を挙げます:

  • 入力:および#hello|#what|whatsup|を返す必要がhello|ありwhatsupます。
  • 入力:#hello#返す必要がありますhello
  • 入力:|ola|1返す必要がありますola
  • 入力:|hello#|what#whatsup#node返す必要がhello#あり、whatsup
4

3 に答える 3

0

これは文字列で機能します。必要なものを完全に理解したかどうかはわかりませんが、必要に応じて調整できると思います。

     String s1 = "#hello|#what|whatsup|";
     String s2 = "#hello#";
     String s3 = "|ola|1";
     String s4 = "|hello#|what#whatsup#node";

     Pattern pattern = Pattern.compile("((\\w)+)(\\||#)(\\||#)?");
     Matcher matcher = pattern.matcher(s4);
     while(matcher.find()) {
         System.out.println(matcher.group(1) + (matcher.group(4) != null ? matcher.group(4).equals("|")? "#" : "|" : ""));
         matcher.find(); //to jump over the next match
     }

更新: middlerecursion の例を読んだところです。残念ながら、それはうまくいきません。しばらくの間、コンピューターから離れる必要があります。ですから、これはあなたが始めるためのものです。

すべての例で機能するバージョンを更新します。

     String s1 = "#hello|#what|whatsup|";
     String s2 = "#hello#";
     String s3 = "|ola|1";
     String s4 = "|hello#|what#whatsup#node";
     String s5 = "#||##||MiddleRecursion||##||#";

     Pattern pattern = Pattern.compile("(#|\\|)((#|\\|)*\\w+(#|\\|)*)(#|\\|)");
     Matcher matcher = pattern.matcher(s1);
     while(matcher.find()) {
         System.out.println(matcher.group(2));
     }
于 2012-05-26T16:09:30.697 に答える
0

#||##||MiddleRecursion||##||#-->以来||##||MiddleRecursion||##||、残念ながらブラケット マッチングを行う必要があります。この場合、正規表現を使用した一般的な解決策はありません (| と # の最大連続出現数がわかっている場合は、強制的に機能させることができます)。その理由は、中間再帰があるからです。正規表現は、左または右の再帰のみを解決できます。

これは、正規表現で HTML 解析ができない理由の1 つでもあります。

于 2012-05-26T15:30:28.633 に答える
0

わかりました、始めます。

したがって、#something# または |something| に一致する必要があります。

それを行う2つの別々の正規表現を書くことができますか?

最初にイライラするのは、パイプ|が正規表現の魔法の文字であることです。その文字で一致させたい場合は、\\リンクした他のスレッドに従って、プレフィックスを付ける必要があります。

これら 2 つの正規表現が機能するようになったら、お知らせください。さらに投稿します。

(私は数時間外出しています...)

于 2012-05-26T15:35:16.327 に答える