【问题标题】:Gradle: regex to find and replace whitespace around specific textGradle:正则表达式查找和替换特定文本周围的空格
【发布时间】:2017-04-21 21:25:38
【问题描述】:

我正在使用 Gradle 解析具有“GO”(或“go”)分隔命令的 SQL 文件。 JDBC 驱动程序不喜欢“go”,所以我使用“go”作为分隔符来拆分文件。我正在使用

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

虽然这是不区分大小写的,但它不考虑前导或尾随空格(有时是空格,有时是制表符)。如果某人在“go”之前或之后有一个空格(或制表符),replaceAll 不会捕捉到它。

我希望使用正则表达式基本上说,“如果一行中唯一的非空白字符是 'go',那么将行更改为 '\nGO\n',以便我可以拆分它”。我认为这会起作用,但它不起作用:

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”被前导、尾随空格或制表符包围,我也需要相同的数组。

【问题讨论】:

    标签: java regex string gradle


    【解决方案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]*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多