- ベストアンサー
java正規表現で複数行を取得し配列にする
javaの正規表現で、下記のようなテキストファイルから配列を作成しようと思っています。 ---------------- .title1 hoge fuga ..title2 hoge2 fuga2 ---------------- ↓ Array[0] = ".title1 hoge fuga" Array[1] = "..title2 hoge2 fuga2" このようなテキストファイルで、上に示したように行頭が[ . ]の行から、次の行頭が[ . ]の行の直前の行までを配列の一つの要素としたいのですが、どのようにすればいいでしょうか ^\.[\w|\W]+ この表現では、「.title1」からテキストの最後までが一致してしまいます。かといって、 ^\.[\w|\W]+^\. としてしまうと、こんどは「.title2」から始まる部分の取得ができなくなってしまいます。 なにかいい方法はありませんでしょうか。正規表現以外でも構いません。よろしくお願い致します
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あれ、もしかして「..title2」って誤記でしょうか 「.title2」が正しいのであれば、こうですね http://ideone.com/ty6sh http://ideone.com/c1kZS ※さっき自分が書いたのにも誤記がありました。 「'..'から始まる行の処理後」→「'..'から始まる行の処理前」
その他の回答 (2)
- sholmes
- ベストアンサー率81% (89/109)
少し勉強したっきりとまっているため、自分にはJava自体のコードで示す事が出来ませんでした。 テキスト処理手法の方へコメントを残しますので、Javaへ応用出来そうであれば使ってみてください。 記載された例を拝見する限り、'.'から始まるという事を気にしなくて良いと思います。 '..'だけ意識すればそれほど難しい話ではなく、例えば次のように解けそうです。 <1> 1, 一度に全て、文字列として読み込む 2, 行頭に「..」がくる箇所で文字列を分割(正規表現利用) Ruby: http://ideone.com/vCISB <2> ※mutableな文字列の場合なので、Javaだとちょっと変わりそうです。 1, 一行ずつ読み込み、文字列へ加えていく 2, '..'から始まる行の処理後、対象文字列を差し替える(startsWithを使えば、正規表現不要) Ruby: http://ideone.com/oIcOz
- Tacosan
- ベストアンサー率23% (3656/15482)
1行ずつ読み込んで処理しちゃダメ?
お礼
一行ずつだと処理が重くなるんじゃないかと思いまして……
お礼
回答ありがとうございました。 「..title2」は正しい表記です。 行頭ドットの数は1-6個の場合があり、そのすべてに一致する必要がありました。 最終的に正規表現で取得する方法を発見しまして、以下のような感じで取得できました。 ^\..*?(?=(^\.|\Z)) これを利用してwhileループで配列作ろうと思ってたのですが、行頭1-6個のドットに一致する正規表現つくってsplit使ったほうが処理楽そうですね…… 直接的な解ではありませんでしたが、正規表現一致後の処理について参考になりました。ありがとうございました!