Gradle:正则表达式,用于查找和替换特定文本周围的空格

时间:2017-04-21 21:25:39

标签: java regex string gradle

我使用Gradle来解析一个有" GO"的SQL文件。 (或" go")分离命令。 JDBC驱动程序并不喜欢" go"所以我使用" go"来解析文件。作为分隔符。我正在使用

multiLineString.replaceAll("(?i)\ngo\n","\nGO\n").split("\nGO\n")

虽然这不区分大小写,但它并不考虑前导或尾随空格(有时是空格,有时是制表符)。如果某人在" go"之前或之后有空格(或制表符),则replaceAll不会抓住它。

我希望使用正则表达式基本上说,"如果一行中唯一的非空白字符是' go',则将该行更改为' \ nGO \ ñ'所以我可以分开它#34;我认为这会奏效,但它没有:

multiLineString.replaceAll (/\n\s+go\s+\n/, "\nGO\n").split("\nGO\n")

multiLineString可以包含如下文本:

drop procedure if exists dbo.procname
go
create procedure dbo.procname as
begin
....

...我想要一个带有两个字符串的数组:

[0] drop procedure if exists dbo.procname
[1] create procedure dbo.procname as\nbegin\n ...

即使" go"我也需要相同的数组。被前导,尾随空格或标签包围。

1 个答案:

答案 0 :(得分:1)

您可以直接与

分开
multiLineString.split("(?i)\n[\\p{Zs}\t]*go[\\p{Zs}\t]*\n")

<强>详情:

  • (?i) - 内联Pattern.CASE_INSENSITIVE修饰符版本
  • \n - 换行符
  • [\\p{Zs}\t]* - 零个或多个水平空格
  • go - 单词go
  • [\\p{Zs}\t]* - 零个或多个水平空格
  • \n - 换行符

此外,如果您希望水平空格只是常规空格或标签,则可以将[\\p{Zs}\t]*替换为[ \t]*