java - 使用正则表达式提取SQL数据

标签 java regex

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

String rightHeading=null;
        String leftHeading=null;

String formulaData="ifnull(\"Content Status\".\"Week Of Quarter\",0)";

            Matcher matcher = Pattern.compile("(\"?([^()]*?)\"?)\\.(\"?([@#$%><{}\\w ]*)\"?)").matcher(formulaData);
            while (matcher.find()) 
            {
            String Column_Data=matcher.group(0);
            String[] pieces = Column_Data.split("\\.");
            rightHeading=pieces[0].replace("\"", "");
            leftHeading=pieces[1].replace("\"", "");

             System.out.println(rightHeading+ ": "+leftHeading);
             }//while

我得到的输出是:

   ifnullContent Status.Week Of Quarter,0)

预期输出:

    Content Status.Week Of Quarter

最佳答案

下面是我针对您的问题的解决方案,以及它产生的输出。

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

    String p1 = "(\"(\\w*\\s*-*)*?\"\\.\".*?\")|((?:\\()((\\w*\\s*-*)*?\\.\\$\\w+))|(\"(\\w*\\s*-*)*?\"\\.(\\w+\\s+)+)";

    Pattern p = Pattern.compile(p1);
    Matcher m = p.matcher(formulaData);

    while(m.find())
    {
        System.out.println(m.group(0).replaceAll("\"|\\(|\\)", ""));
    }

输出:

Fact - Bookings.$ Total Gross Bookings
Booking Date.Year
Fact - Bookings.$ Total Gross BookingsData
Booking Date.Year
Booking Date.Sortable Number
Fact - Bookings.$TotalGrossBookingsUsage
Booking Date.Year
Booking Date.Sortable Number

如您所见,我实际上并没有使用极其复杂的正则表达式来解决您的问题。这是因为您的输入过于多样化,无法有效地使用此工具。

事实上,您的 table.field 对有时会在其中包含 $" 符号,这使得数据非常不一致。正则表达式很难处理这种复杂程度,所以我认为我的解决方案(在本示例中)是可行的。

但是,将来如果您对数据输入有任何控制权,请尝试对其进行清理并使其尽可能一致。

编辑 由于这对您不起作用,因此我更改了代码片段以使用正则表达式。

关于java - 使用正则表达式提取SQL数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29533888/

相关文章:

Python:- 将字符串转换为列表

正则表达式匹配所有以 n 个字符开头的序列

java - java.library.path 中缺少文件

java - (JAVA)将十进制转换为二进制编码的十进制?

java - Hibernate 中的 Order.asc(<String>) 和 Comparable 接口(interface)中的 "compareTo"行为是否相同?

javascript - 获取代数项的系数

java - 使用 Java 从 Google 日历服务读取 XML 响应

java - 具有历史 API 的 Wicket AjaxEventBehavior

regex - 如何在 Scala 中使用正则表达式进行模式匹配?

regex - 是否可以删除已经匹配的捕获组,使其不参与?