1

私は正規表現を初めて使用します。初歩的な質問で申し訳ありません。
私の問題は、文字列でデータをグループ化したいことです

私が取得したいのはffです:

  1. a-z A-Zまたはa-z A-Z0 ~ 9 (例: abc、bzc15、ただし 1abc または 14bc は除く)
  2. 0-9(例: 1,23,56 など)
  3. これらのオペレーター+ * - /
  4. 空白
  5. ()

それらを配列にグループ化し、可能であればその位置を保持したいと考えています。

元:

String test = "a + b + 6";

結果は次のようになります

Array[0] = a
Array[1] = White Space
Array[2] = +
Array[3] = White Space
Array[4] = b
Array[5] = White Space
Array[6] = +
Array[7] = White Space
Array[8] = 6

これは可能ですか?はいの場合、どのパターンを使用すればよいですか?
どんな助けでも感謝されます

4

4 に答える 4

0

この正規表現はあなたが望むことをすると思います:

"((?<=\\d)(?=\\p{Alpha}))|((?<=\\w)(?=\\W))|((?<=\\W)(?=\\w))|((?<=\\W)(?=\\W))"

String次の場所で分割されます。

  • 数字の後[0-9]、文字の前[a-zA-Z]
  • 単語文字[a-zA-Z_0-9]と非単語文字の間。
  • 単語以外の 2 つの文字の間。
于 2013-05-01T13:25:51.517 に答える
0

私はここで推測していますが、数学的なステートメントを解析したい、つまり語彙分析を実行しようとしていると思います - ( http://en.wikipedia.org/wiki/Lexical_analysis )

簡単な解決策として、完全に開発された Java 字句解析/解析ジェネレーターの 1 つを検討することをお勧めします。 /とても使いやすいです。

それ以外の場合は、カスタム パーサー コードを記述する必要があります。

String[] array = test.split("((?<=\\S)(?=\\s))|((?<=\\s)(?=\\S))"); またはchar[] charArr = test.toCharArray(); ここでは不適当です

input       Expected Result     Result of bad solution
(2 + 4)     [(,2,+,4,)]         [(2,+,4)]
1+2         [1,+,2]             [1+2]
2 + 14(5)   [2,+,14,(,5,)]      [2,+3,14(5)]
3a          [3,a]               [3a]
abs(5 + 6)  [abs,(,5,+,6,)]     [abs(5,+,6)]

*basicaly anywhere the input does not have an explicit space between token, which    
should be allowed but the other suggested solutions do not support. 
于 2013-05-01T12:41:04.373 に答える