正则表达式提取点符号前后的数据?

时间:2015-04-10 02:13:20

标签: java regex

我以这种方式获得了不正确的数据。我需要使用正则表达式在点之前和点符号之后提取数据。

我正在使用正则表达式,但我无法获得准确的数据。

我有2个scenrios:

  1. 前后双引号。
  2. 在点之前和之后没有双引号,有时在之前和之后将没有双引号

  3. String tableHeading=null;
    
        Matcher matcher = Pattern.compile("(\"(.*?)\".*?)\\.(\"(.*?)\".*?)").matcher(formulaData);
    
        while (matcher.find()) 
        {
        String Column_Data=matcher.group(0);
        String[] pieces = Column_Data.split("\\.");
        tableHeading=pieces[0];
        columnHeading=pieces[1];
         System.out.println(tableHeading+ ": "+columnHeading);
         }//while
    

2 个答案:

答案 0 :(得分:1)

只需将正则表达式修改为:

Matcher matcher = Pattern.compile("(\"([^()]*?)\")\\.(\"?([$\\w ]*)\"?)").matcher(formulaData);

()不是预期的。

答案 1 :(得分:0)

您不需要string.split只使用Matcher功能,Pattern类就足够了。

String formulaData="(100*(FILTER(\"Fact - Bookings\".\"$ Total Gross Bookings\" USING (\"Booking Date\".\"Year\" =  VALUEOF(\"CUR_YEAR\")))  - FILTER(\"Fact - Bookings\".\"$ Total Gross Bookings\" USING \"Booking Date\".\"Year\" =  VALUEOF(\"PREV_YEAR\") AND  \"Booking Date\".\"Sortable Number\" <= VALUEOF(\"PRV_YEAR_TD\") ) ) / FILTER(\"Fact - Bookings\".\"$ Total Gross Bookings\" USING \"Booking Date\".\"Year\" =  VALUEOF(\"PREV_YEAR\") AND \"Booking Date\".\"Sortable Number\" <= VALUEOF(\"PRV_YEAR_TD\") ) )";

Matcher matcher = Pattern.compile("(\"[^\"]*\")\\.(\".*?\")").matcher(formulaData);

while (matcher.find()) 
{

 System.out.println(matcher.group(1)+ ": "+matcher.group(2));
 }

<强>输出:

"Fact - Bookings": "$ Total Gross Bookings"
"Booking Date": "Year"
"Fact - Bookings": "$ Total Gross Bookings"
"Booking Date": "Year"
"Booking Date": "Sortable Number"
"Fact - Bookings": "$ Total Gross Bookings"
"Booking Date": "Year"
"Booking Date": "Sortable Number"