正则表达困境

时间:2015-12-25 18:00:51

标签: java c++ expression newline

我有以下数据,我想将其转换为正则表达式。

PALMKERNEL OIL Mal / Indo dlrs tonne cif Rotterdam

Dec15 / Jan16 890.00

Jan16 / Feb16 900.00 +10.00

我的代码似乎不起作用。首先,我如何确定在890之后,可能没有任何内容,或者该格式中可能有+10.00或任何数字?我试图使用?:但有时它会完全忽略我想要捕获的月份信息。在这种情况下,我不想在890或900之后捕获+10.00或任何字符。

(PALMKERNEL OIL Mal \ b)/(Indo dlrs tonne cif Rotterdam \ b)\ s *([^ \ s] +)\ s *(\ d *。?\ d *)\ s *([^ ?\ S] + | [+ \ d * \ d *])\ S *(\ d * \ d *)\ S *([^ \ S] + |(:?[+ \ d *?。 ?\ d *]))

1 个答案:

答案 0 :(得分:1)

对于具有日期和价格的部分,此正则表达式处理样本字符串中的两个变体。

Pattern pat = Pattern.compile( 
     "\\w{3}\\d{1,2}/\\w{3}\\d{1,2}" +
     "\\s*(\\d+\\.\\d\\d)(\\s+\\+\\d+\\.\\d\\d)?" );
String s1 = "Dec15/Jan16 890.00";
String s2 = "Jan16/Feb16 900.00 +10.00";
Matcher m1 = pat.matcher( s1 ); 
if( m1.matches() )
  System.out.println("m1 " + m1.group(1) + ":" + m1.group(2) );
Matcher m2 = pat.matcher( s2 ); 
if( m2.matches() )
  System.out.println("m2 " + m2.group(1) + ":" + m2.group(2) );

输出:

m1 890.00:null
m2 900.00: +10.00

没有足够的信息 - 所以我不知道/+10.00 /?中的第三种选择。