多行正则表达式布局

3

我有一个正则表达式:Regex("((group1)(group2))(group3)")

我想以一种漂亮清晰的方式格式化它,例如:

(
  (group1)
  (group2)
)
(group3)

例如,我尝试了这个:

Regex("("
    +   "(group1)"
    +   "(group2)"
    + ")"
    + "(group3)")     //--> loses the syntax highlighting in Intellij and a bit messy

Regex("""(
           (group1)
           (group2)
         )
         (group3)""") //--> not bad, but not equivalent (adds spaces and \n characters)
有没有一种方法可以保持原始正则表达式和语法高亮,同时具有简洁的布局?
1个回答

4

看起来你仍然可以使用 COMMENTS 修饰符(或者 (?x) 内联版本):

Regex("""(?x)(          # Group 1
              (group1)  # Group 2
              (group2)  # Group 3
             )
             (group3)  # Another group"""

请查看COMMENTSRegexOption的参考文献:

允许在模式中包含空格和注释。

如果#符号在模式中表示文字#,则必须对其进行转义。

请注意,即使在字符类内部,文字空格也被视为格式化空格。如果需要匹配文字空格,请对其进行转义:"""(?x)free\ spacing""""""(?x)[a-zA-Z\ ]+"""


运行得非常好。不过我在转义字符上遇到了问题,所以您可能需要在回答中添加正则表达式转义只需要在“三引号”字符串中加一个\。因此,对于数字,它是 """ \d """ 而不是 """ \\d """ - assylias
在三引号字符串字面值内,定义一个反斜杠可以使用\,在允许转义字符(如\n\r等)的常规字符串字面值内,定义一个反斜杠需要两个- "\\" - Wiktor Stribiżew
1
我看到了,在回答末尾格式化示例时犯了一个错误。我在第一个使用了<code>标签,在第二个使用了反引号,并被自己骗了。已修复。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,