首页 > 解决方案 > 无法在 Java 中捕获下一行字符

问题描述

我需要通过包含多个 sql 查询的 python 文件进行解析并获取查询的开始和结束位置以仅使用 JAVA 获取查询部分

我正在使用 .contains 函数来检查sql('''我的查询的开始字符,现在检查我的结束字符,''')但是在某些情况下,''')当涉及的变量不应该被检测为结束时,查询之间会出现查询。

像这样的东西:

spark.sql(''' SELECT .......
FROM..... 
WHERE  xxx IN ('''+ Variable +''')
''')

line.contains(" ''') ")如果我使用错误,最后一行也会被检测为行尾。

我能想到的就是检查下一行字符作为查询的结尾,因为每个查询都由两个空行分隔。所以尝试了这些if (line.contains(" ''')\n")if (line.contains(" ''')\r\n")但没有一个对我有用。

请让我知道任何其他方式来做到这一点。

请注意,我无权更改查询文件。

谢谢

标签: javaregexcontains

解决方案


我相信简单的包含不会解决这个问题。

如果要匹配,则必须使用 Pattern \n

String query = "spark.sql(''' SELECT .......\n" +
        "FROM..... \n" +
        "WHERE  xxx IN ('''+ Variable +''')\n" +
        "''')";
Pattern pattern = Pattern.compile("^spark.sql\\('''(.*)'''\\)$", Pattern.DOTALL);
System.out.println(pattern.matcher(query).find());

输出:

true

Pattern.DOTALL告诉 Java 也允许点匹配换行符。


推荐阅读