電子書籍の厳選無料作品が豊富!

javaの正規表現で、下記のようなテキストファイルから配列を作成しようと思っています。

----------------
.title1
hoge
fuga
..title2
hoge2
fuga2
----------------

Array[0] = ".title1
hoge
fuga"
Array[1] = "..title2
hoge2
fuga2"

このようなテキストファイルで、上に示したように行頭が[ . ]の行から、次の行頭が[ . ]の行の直前の行までを配列の一つの要素としたいのですが、どのようにすればいいでしょうか

^\.[\w|\W]+

この表現では、「.title1」からテキストの最後までが一致してしまいます。かといって、

^\.[\w|\W]+^\.

としてしまうと、こんどは「.title2」から始まる部分の取得ができなくなってしまいます。

なにかいい方法はありませんでしょうか。正規表現以外でも構いません。よろしくお願い致します

A 回答 (3件)

あれ、もしかして「..title2」って誤記でしょうか


「.title2」が正しいのであれば、こうですね

http://ideone.com/ty6sh
http://ideone.com/c1kZS

※さっき自分が書いたのにも誤記がありました。
 「'..'から始まる行の処理後」→「'..'から始まる行の処理前」
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
「..title2」は正しい表記です。
行頭ドットの数は1-6個の場合があり、そのすべてに一致する必要がありました。

最終的に正規表現で取得する方法を発見しまして、以下のような感じで取得できました。
^\..*?(?=(^\.|\Z))
これを利用してwhileループで配列作ろうと思ってたのですが、行頭1-6個のドットに一致する正規表現つくってsplit使ったほうが処理楽そうですね……

直接的な解ではありませんでしたが、正規表現一致後の処理について参考になりました。ありがとうございました!

お礼日時:2011/07/22 01:13

少し勉強したっきりとまっているため、自分にはJava自体のコードで示す事が出来ませんでした。


テキスト処理手法の方へコメントを残しますので、Javaへ応用出来そうであれば使ってみてください。


記載された例を拝見する限り、'.'から始まるという事を気にしなくて良いと思います。
'..'だけ意識すればそれほど難しい話ではなく、例えば次のように解けそうです。

<1>
1, 一度に全て、文字列として読み込む
2, 行頭に「..」がくる箇所で文字列を分割(正規表現利用)
Ruby: http://ideone.com/vCISB

<2>
※mutableな文字列の場合なので、Javaだとちょっと変わりそうです。
1, 一行ずつ読み込み、文字列へ加えていく
2, '..'から始まる行の処理後、対象文字列を差し替える(startsWithを使えば、正規表現不要)
Ruby: http://ideone.com/oIcOz
    • good
    • 0

1行ずつ読み込んで処理しちゃダメ?

    • good
    • 0
この回答へのお礼

一行ずつだと処理が重くなるんじゃないかと思いまして……

お礼日時:2011/07/22 01:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!