title: What is the correct regular expression for finding specific pattern in these lines?
body: <p>So I have one large file that contains a bunch of weather data. I have to allocate each line from the large file into its corresponding state file. So there will be a total of 50 new state files with their own data. </p>
  
  <p>The large file contains ~1 million lines of records like this:</p>
  
  <pre><code>COOP:166657,'NEW IBERIA AIRPORT ACADIANA REGIONAL LA US',200001,177,553
  </code></pre>
  
  <p>Although the name of the station can vary and have different number of words. </p>
  
  <p>This is the regular expression I am using: </p>
  
  <pre><code>Pattern p = Pattern.compile(".* ([A-Z][A-Z]) US.*"); 
  Matcher m = p.matcher(line);
  </code></pre>
  
  <p>When I run my program there are still instances of lines in which the pattern could not be found. </p>
  
  <p>This is my program: </p>
  
  <pre><code>package climate;
  
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.util.Arrays;
  import java.util.Scanner;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  /**
   * This program will read in a large file containing many stations and states,
   * and output in order the stations to their corresponding state file.
   * 
   * Note: This take a long time depending on processor. It also appends data to
   * the files so you must remove all the state files in the current directory
   * before running for accuracy.
   * 
   * @author Marcus
   *
   */
  
  public class ClimateCleanStates {
  
      public static void main(String[] args) throws IOException {
  
          Scanner in = new Scanner(System.in);
          System.out
                  .println("Note: This program can take a long time depending on processor.");
          System.out
                  .println("It is also not necessary to run as state files are in this directory.");
          System.out
                  .println("But if you would like to see how it works, you may continue.");
          System.out.println("Please remove state files before running.");
          System.out.println("\nIs the States directory empty?");
          String answer = in.nextLine();
  
          if (answer.equals("N")) {
              System.exit(0);
              in.close();
          }
          System.out.println("Would you like to run the program?");
          String answer2 = in.nextLine();
          if (answer2.equals("N")) {
              System.exit(0);
              in.close();
          }
  
          String[] statesSpaced = new String[51];
  
          File statefile, dir, infile;
  
          // Create files for each states
          dir = new File("States");
          dir.mkdir();
  
  
          infile = new File("climatedata.csv");
          FileReader fr = new FileReader(infile);
          BufferedReader br = new BufferedReader(fr);
  
          String line;
          System.out.println();
  
          // Read in climatedata.csv
          // Probably need to implement ClimateRecord class
          final long start = System.currentTimeMillis();
          while ((line = br.readLine()) != null) {
              // Remove instances of -9999
  
              if (!line.contains("-9999")) {
  
  
  
                          Pattern p = Pattern.compile("^.* ([A-Z][A-Z]) US.*$"); 
                          Matcher m = p.matcher(line);
                          String stateFileName = null;
  
                          if(m.find()){
                              //System.out.println(m.group(1));
                              stateFileName = m.group(1);
                          } else {
                              System.out.println("Could not find abbreviation");
                          }
  
                          /*
                          stateFileName = "States/" + stateFileName + ".csv";
                          statefile = new File(stateFileName);
  
                          FileWriter stateWriter = new FileWriter(statefile, true);
                          stateWriter.write(line + "\n");
                          // Progress reporting
                          System.out.printf("Writing [%s] to file [%s]\n", line,
                                  statefile);
                          stateWriter.flush();
                          stateWriter.close();
                          */
  
  
  
  
  
              }
          }
          System.out.println("Elapsed " + (System.currentTimeMillis() - start) + " ms");
          br.close();
          fr.close();
          in.close();
  
      }
  
  }
  </code></pre>