0

Java の Regex について簡単な質問があります (他の言語もおそらく同様ですが)。

私がやろうとしているのは、次のように文字列を変換することです:

 How are you "Doing well" How well 10 "That's great"

//# I want the Regex in Java to match out all of the words, numbers, 
//# and things inside quotation marks. Ideally, I'd get something like this 

How
Are
You
"Doing Well"
How 
Well
10
"That's Great!"

私が使用しようとしている正規表現は次のとおりです。

String RegexPattern =   "[^"+           //  START_OR: start of line OR" 
                        "\\s" +         //  empty space OR
                        "(\\s*?<=\")]" + // ENDOR: preceeded by 0 or more spaces and a quotation mark 
                        "(\\w+)" +      // the actual word or number
                        "[\\s" +        // START_OR: followed by a space OR
                        "(?=\")" +      // followed by a quotation mark OR
                        "$]";           // ENDOF:  end of line

ただし、これはうまくいきません。はるかに単純な文字列でも!ここで同様の問題を探すのに多くの時間を費やしました。引用符が必要ない場合は、分割を使用できます。ただし、最終的には、このパターンはさらに複雑になるため、正規表現を使用する必要があります (これは最初の反復にすぎません)。

助けていただければ幸いです。前もって感謝します!

4

3 に答える 3

2

私は[ ]あなたがそれが意味すると思うことを意味するとは思わない。角括弧内^は、実際には文字クラスの否定演算子です。このタスクに着手する前に、より小さな正規表現で練習する必要があります。あなたが探しているパターンはもっと似ています:

    \s*([^"\s]+|"[^"]*")

これが実際に動作しているのは、http: //rubular.com/r/enq7eXg9Zmで確認できます。

単語に記号が必要ない場合は、記号を削除する2番目の正規表現を使用するのがおそらく最善です。

    \W
于 2012-05-31T19:08:13.857 に答える
0

これはあなたのために働くはずです。(\ "[^ \"] + \ ")|([^ \ s] +)

于 2012-05-31T19:51:31.027 に答える
0

複数のステップで実行できます (コードは Python ですが、ロジックとパターンは同じである必要があります)。

1 - 二重引用符で囲まれたすべての文字列を取得します。

r = re.findall(r'\"([^"]*)\"','How are you "Doing well" How well 10 "That\'s great"')

結果:['Doing well', "That's great"]

2 - これらの文字列をテキストから削除します。

r = re.sub(r'\"([^"]*)\"', "", 'How are you "Doing well" How well 10 "That\'s great"')

結果:'How are you How well 10 '

3 - これで、分割にステップ 1 の二重引用符で囲んだものを追加できます。

間違いなく良い/クリーンなソリューションではありませんが、うまくいくはずです。

于 2012-05-31T19:46:56.723 に答える