1

私はこの文字列を持っています:

Date Description Amount Price Charge Shares Owned
04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.369
05/31/13 INCOME REINVEST 0.0228 $22.99 $12.22 1.881 1,010.250
06/28/13 INCOME REINVEST 0.0224 $22.63 $11.97 1.891 1,012.141

抽出したい文字列の日付は「matchedDate」と同様に説明します。この場合は「INCOME REINVEST」、「INCOME REINVEST」、「INCOME REINVEST」です。

「0.0245」、「0.0228」、「0.0224」である配列内の量

配列の価格:"24.66"、"22.99"、"22.63"

配列の充電:"12.34"、"12.22"、"11.97"

配列内のシェア:"1.998","1.881","1.891"

1,008.369、1,010.250、および 1,012.141 に対応する最後の部分「所有」は必要ありません

これまでのところ、これで日付を正常に抽出できます。

String regex="[0-9]{2}/[0-9]{2}/[0-9]{2}";
Pattern dateMatch = Pattern.compile(regex);
Matcher m = dateMatch.matcher(regString);
while (m.find()) {
String[] matchedDate=new String[] {m.group()};
for(int count=0;count<matchedDate.length;count++){
sysout(matchedDate[count]
}

regString は、最初のブロックで説明したテーブルと一致させようとしている文字列です。

$ 記号は必要ないので、数値を整数配列に格納できます。これを行うには、ある種のスペースとドルのパターンを特定する必要があると思います。

どんな助けでもいただければ幸いです

4

4 に答える 4

0
String regString = "04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.36";
String regex="([0-9]{2}/[0-9]{2}/[0-9]{2})\\s*([\\w ]+)\\s*(\\d+(\\.\\d+)?)\\s*\\$(\\d+(\\.\\d+)?)\\s*\\$(\\d+(\\.\\d+)?)\\s*(\\d+(\\.\\d+)?)\\s*(\\d+(,\\d{3})*(\\.\\d+)?)";
Pattern match = Pattern.compile(regex);

Matcher m = match.matcher(regString);
while (m.find()) {
        System.out.println(m.group(1)); //04/30/13
        System.out.println(m.group(2)); //INCOME REINVEST
        System.out.println(m.group(3)); //0.0245
        System.out.println(m.group(5)); //24.66
        System.out.println(m.group(7)); //12.34
        System.out.println(m.group(9)); //1.998
        System.out.println(m.group(11)); //1,008.86
}

デモ

正規表現の内訳:

([0-9]{2}/[0-9]{2}/[0-9]{2})- 日付の正規表現。

([\\w ]+)- 説明 - 1 つ以上の Word 文字とスペース。

(\\d+(\\.\\d+)?)(4 回使用) - 金額、価格、料金、株数 - 1 つ以上の数字の後.に 1 つ以上の数字が続く可能性があります。

(\\d+(,\\d{3})*(\\.\\d+)?),- 1+ の数字の後に、aと 3 つの数字のシーケンスが続く可能性があり、その後に a.と少なくとも 1 つの数字が続く可能性があります。

于 2013-11-12T11:08:10.330 に答える
0
String r = "([0-9]{2}/[0-9]{2}/[0-9]{2}).+?\\$((?:(?:\\d+|\\d+,\\d+)\\.\\d+\\s\\$?){3})";
String list = "04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.369"; 

Matcher m = Pattern.compile(r).matcher(list);

while (m.find()) 
{
    String myData = m.group(1) + " " + m.group(2).replace("$", "");
    String[] data = myData.split(" ");

    for(String s : data)
        System.out.println(s);
}

出力:

2013 年 4 月 30 日
24.66
12.34
1.998


.+?\\$: 取得しないことを保証するための非貪欲 --基本的に、捕捉グループを使用して関心のある 3 つの数字を取得する'$'まですべてをスキップしますが、の 1 つを使用し ます。かなり長いでしょう。「グループ化しますが、キャプチャしません」と言う数字または #,#と言うと、その後に # が続き、その後に空白とオプションの'$'
((?:(?:\\d+|\\d+,\\d+)\\.\\d+\\s\\$?){3}'$'.replace().replace()
(?:\\d+|\\d+,\\d+)
\\.\\d+\\s\\$?'.''$'

これは、正規表現に関する一般的なチュートリアルです。グループのキャプチャに関するセクションは次のとおりです。
幸運を!

于 2013-11-12T11:12:20.587 に答える
0

これにより、必要なものが得られ、入力文字列の任意の数の同様のレコードに対しても実行されます...

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

private static Pattern PATTERN = Pattern.compile("([0-9]{2}/[0-9]{2}/[0-9]{2})\\s+([a-zA-Z]+\\s[a-zA-Z]+)\\s+(\\d{1}\\.\\d{0,4})\\s+\\$(\\d{1,2}\\.\\d{0,2})\\s+\\$(\\d{1,2}\\.\\d{0,2})\\s+(\\d{1,2}\\.\\d{0,3})\\s+");

public static void main(String a[] ) {      

  String regString = "04/30/13 INCOME REINVEST 0.0245 $24.66 $12.34 1.998 1,008.369 " +
        "05/31/13 INCOME REINVEST 0.0228 $22.99 $12.22 1.881 1,010.250 " +
        "06/28/13 INCOME REINVEST 0.0224 $22.63 $11.97 1.891 1,012.141 ";

  ArrayList<String> date = new ArrayList<String>();
  ArrayList<String> desc = new ArrayList<String>();
  ArrayList<String> amt = new ArrayList<String>();
  ArrayList<String> price = new ArrayList<String>();
  ArrayList<String> charge = new ArrayList<String>();
  ArrayList<String> share = new ArrayList<String>();

  Matcher m = PATTERN.matcher(regString);     
  while(m.find()) {
      date.add(m.group(1));
      desc.add(m.group(2));
      amt.add(m.group(3));
      price.add(m.group(4));
      charge.add(m.group(5));
      share.add(m.group(6));    
  }

  System.out.println("DATE : " + date.toString());
  System.out.println("DESC : " + desc.toString());
  System.out.println("AMOUNT : " + amt.toString());
  System.out.println("PRICE : " + price.toString());
  System.out.println("CHARGE : " + charge.toString());
  System.out.println("SHARES : " + share.toString());    
}
}

上記のプログラムの出力は次のとおりです。

DATE : [04/30/13, 05/31/13, 06/28/13]
DESC : [INCOME REINVEST, INCOME REINVEST, INCOME REINVEST]
AMOUNT : [0.0245, 0.0228, 0.0224]
PRICE : [24.66, 22.99, 22.63]
CHARGE : [12.34, 12.22, 11.97]
SHARES : [1.998, 1.881, 1.891]
于 2013-11-12T15:10:59.133 に答える