• 締切済み

javaにおける正規表現

javaの正規表現で文字と文字の間の文字を抽出という処理をおこないたいのですが、うまくできません。 抽出したいないようは、 「今日の最低気温-1℃です」の[-1]です。 様々な文献をしらべましたが、自分なりの答えを導くことができませんでした。 よろしくおねがいします。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

自分の手元で動作するのを確認してからソースをそのままコピー&ペーストしてますので、 そちらで動かないといわれてもどうしようもありません。 まして動かない原因を探る手がかりもありませんから。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

こんなかんじでいいですか? import java.util.regex.*; public class OKWave{ public static void main(String[] args){ String pat = "-?\\d+(?=℃)"; String[] samples = { "今日は最高気温11℃、最低気温-1℃です", "最低気温-15℃でした。" }; Pattern p = Pattern.compile(pat); for (int i = 0; i < samples.length; i++){ Matcher m = p.matcher(samples[i]); if (m.find()) { System.out.println("取り出した気温は" + m.group() + "でした"); } } } } 実行結果: 取り出した気温は11でした 取り出した気温は-15でした

hamadamaro
質問者

お礼

丁寧な回答ありがとうございます。 まさしくもとめていた答えです。 さきほどIDEにて走らせてみました。 IDEでOKWavaクラスのプログラムが、System.out.printlnされませんでした 汗; プログラムの構築はきちんとされるみたいなのですが、 なんどもすみません。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> 最初に現れる「℃」の前の数字のみ抽出したいです。 なら、 -?\d+(?=℃) でやれば、温度の数字(符号含む)だけを取り出せますよ。 あ、気温が 15.8℃みたいに小数点つきになったりします?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

もうちょっと条件を明確にしてください。 たとえば文字列には数字は一カ所しか現れないとか、 前後にこの文字が必ず現れる。とか。 ℃が続く数字ということなら -?\d+℃ あたりを起点に適当に調整するとかですが。

hamadamaro
質問者

お礼

回答ありがとうございます。 文字列には「-」の文字が数か所現れますし、数字も数か所、「℃」という文字は2箇所あらわれます。 最初に現れる「℃」の前の数字のみ抽出したいです。 前後に温と℃は必ず現れます。 抽出したい部分が「温」と「℃」の間の数字のみ抽出したいです。 条件が曖昧でもうしわけございません。