2

()を含む文字列を分割するための正規表現を探しています。

これは私が持っているものです

String regex = "(?=\\()|()"

最初の部分は「(」で始まるように正しいです。2番目の部分は「)」で終わる必要がありますが、「)」の後に数字がある場合は、その数字で終わる必要があります。

例Fe2(CH3)2(CH2O)(CH3)

これは分割する必要があります

Fe2

(CH3)2

(CH2O)

(CH3)

「)」の後の数字は、1桁または2桁のいずれかです。

また、たとえばFe(C5H5)2O4(CH3)をに分割する必要があります

Fe

(C5H5)2

O4

(CH3)

4

4 に答える 4

3

更新された新しいロジック:いくつかの文字文字または括弧で囲まれたもののいずれかに一致し、その後にオプションの数字が続きます。

final String f = "Fe2(CH3)2O4(CH2O)2(CH3)";
final Matcher m = Pattern.compile("(\\p{L}+|\\(.*?\\))\\d*").matcher(f);
while (m.find()) System.out.println(m.group());
于 2012-05-27T20:55:26.687 に答える
2

編集

これがあなたのために働くことを願っています:)

String s="Fe2(CH3)2(CH2O)(CH3)23O4(CH3)";
String[] array=s.split("(?=\\()|(?<=\\)[0-9]{1,2}+)");
System.out.println(Arrays.toString(array));
//out: [Fe2, (CH3)2, (CH2O), (CH3)23, O4, (CH3)]
于 2012-05-27T21:01:36.860 に答える
1

私はすべての場合に機能するsolnを見つけたようです:

Enter your regex: \(.*?\)[0-9]{0,2}|[\w]+
Enter input string to search: Fe2(CH3)2O4(CH2O)(CH3)
I found the text "Fe2" starting at index 0 and ending at index 3.
I found the text "(CH3)2" starting at index 3 and ending at index 9.
I found the text "O4" starting at index 9 and ending at index 11.
I found the text "(CH2O)" starting at index 11 and ending at index 17.
I found the text "(CH3)" starting at index 17 and ending at index 22.

コードで使用される正規表現は次のとおりです。

String regEx = "\\(.*?\\)[0-9]{0,2}|[\\w]+";

つまり、「(」で始まり「)」で終わる文字列と数字を探します。それがない場合は、「Fe2」、「O4」などの文字列を検索します。

于 2012-05-27T21:16:08.830 に答える
1

java-regex固有のことについてはわかりませんが、これは.netで機能しました:(
(^[A-Za-z0-9]+)|(\([A-Za-z0-9]+\)[A-Za-z0-9]{0,2})
エスケープせず、\必要に応じて追加してください...)

編集:今、私はあなたがしていることについて読みました。私の正規表現はSPLITTINGでは機能しません。むしろ、matchそれを呼び出す必要があります。そして、すべての試合はあなたのためのワンピースになります。

そして、これがあなたが望むことを正確に行わない場合は、より多くの入力と望ましい出力(特にこれがカバーしていないもの)を指定してください、そして私は喜んでお手伝いします...

于 2012-05-27T20:29:52.220 に答える