【问题标题】:Regex to extract data before and after dot symbols?正则表达式在点符号之前和之后提取数据?
【发布时间】:2015-06-15 15:05:20
【问题描述】:

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

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

我有两个场景:

  1. 前后加双引号。
  2. 点前后没有双引号,有时前后也没有双引号

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

【问题讨论】:

  • 您可以发布输入样本吗?
  • 输入为公式数据字符串变量

标签: java regex


【解决方案1】:

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

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

() 不是预期的。

【讨论】:

  • 嗨 Sid,对于第一个 FormualData,这个表达式是有效的并且并行我需要处理没有双引号的第二个版本,请参阅我在代码中评论的公式数据。这样我也需要处理。示例输入数据 //String formulaData="FILTER(\"Fact - Bookings\".\"$ Total Gross Bookings\" USING (\"Booking Date\".Quarter = VALUEOF(\"CUR_QTR\")))";
【解决方案2】:

您不需要使用string.split 函数,只需MatcherPattern 类就足够了。

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"

【讨论】:

  • 如果你能解释你的精彩答案,那就太棒了@avinash raj
  • 听到我需要的输出是这样的:“Fact - Bookings”:“$ Total Gross Bookings”“Booking Date”:“Year”“Fact - Bookings”:“$ Total Gross Bookings”“Bookings Date": "Year" "Booking Date": "Sortable Number" "Fact - Bookings": "$ Total Gross Bookings" "Booking Date": "Year" "Booking Date": "Sortable Number" 我得到的错误输出是“CUR_YEAR”:“$ 总预订量”和“PRV_YEAR_TD”:“$ 总预订量”
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多