Scala 通过至少两个连续的换行符 (\r\r) 和一行上打印的多个分隔符拆分多行字符串



我有以下多行字符串:

-- MySQL dump 10.13  Distrib 5.7.15, for Linux (x86_64)
--
-- Host: localhost    Database: 
---- ----------------------------------------------------
-- Server version   5.7.15-0ubuntu0.16.04.1
--------------------------------------------------------
-- test2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `test`
--

这是一个问题的后续问题(Scala 通过包含所有连字符的行拆分多行字符串)

我想用所有连字符(作品)和分隔文本块的空行来拆分这个字符串,我试过 (?m)(\r?\r?+)|(?m)(^(++|-+|=+|#+|_+|[--+]|-- -+)$),适用于连字符,但不在空行上拆分。

您可以使用

val rx = """(?m)s*^(?:([-+=#_])1+|s)+$s*|(?:r?n)+"""
val res = text.split(rx)
print(res.toList.foreach(println))

Scala 演示的输出:

-- MySQL dump 10.13  Distrib 5.7.15, for Linux (x86_64)
-- Host: localhost    Database:
-- Server version   5.7.15-0ubuntu0.16.04.1
-- test2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- Current Database: `test`

图案详情

  • (?m)- 一个多行修饰符,使^与行首匹配,$匹配行尾
  • s*- 行首前的任何 0+ 空格
  • ^- 行首
  • (?:([-+=#_])1+|s)+- 任何包含空格符号和/或重复连续-+=#_符号的行
  • $- 行尾
  • s*- 行首前的任何 0+ 空格
  • |- 或
  • (?:r?n)+- 1 个或多个换行符(CRLFLF样式)。

在线查看正则表达式演示。

最新更新