将多行 Markdown 表格字符串安全转为单行以支持正则解析

风静君_3959

风静君_3959

2026-03-21

164人浏览

原创

将多行 Markdown 表格字符串安全转为单行以支持正则解析

本文介绍在 Java/Groovy(如 Jira ScriptRunner)中,如何将含 换行符的多行 Markdown 表格字符串规范化为逻辑单行(保留原始分隔符),从而确保正则或 splitEachLine 等解析逻辑稳定可靠。重点解决换行符被提前解释导致匹配失败的问题。

本文介绍在 java/groovy(如 jira scriptrunner)中,如何将含 ` ` 换行符的多行 markdown 表格字符串规范化为逻辑单行(保留原始分隔符),从而确保正则或 `spliteachline` 等解析逻辑稳定可靠。重点解决换行符被提前解释导致匹配失败的问题。

在 Jira ScriptRunner 等 Groovy 运行环境中处理 issue 描述字段时,常遇到一个典型问题:原始 Markdown 表格以多行形式存储(含 ),但 Groovy 字符串字面量或日志输出中这些换行符会被实际解析为换行,导致后续基于正则或按行分割(如 splitEachLine())的解析逻辑失效——尤其当正则设计依赖“单行内匹配”或 splitEachLine 期望统一分隔符时。

关键认知:无需真正“删除换行”,而是确保换行符作为可预测、可控制的字符串字符参与处理。
Groovy 中的 String.splitEachLine(pattern) 方法天然适配多行文本,它会按行分割后再对每行应用正则捕获,完全不需要手动将多行“压缩”为单行。强行用 replaceAll("[\r\n]+", " ") 或类似方式合并,反而会破坏表格结构(例如将 |*Task 4*| 15/03/23|... 错误地压成一行后导致列错位),且引入空格污染,使正则更难健壮。

✅ 推荐方案:直接使用 splitEachLine() 配合稳健分隔逻辑
以下为生产就绪的 Groovy 示例(兼容 Jira Server ScriptRunner):

import groovy.json.JsonOutput

// 模拟从 issue.getDescription() 获取的原始多行字符串(含 
)
String description = """|| ||Due Date||Done on||OK/NOK||Remarks||
|*Task 1*| | | | |
|*Task 2*| | | | |
|*Task 3*| | | | |
|*Task 4*| 15/03/23| | | See document X|"""

List<map> actionItems = []

// 使用 splitEachLine 安全按行处理;正则匹配每行中的单元格内容
// 注意:此处用 "\|\*" 和 "\*" 分别捕获开头和结尾的 *,再 trim 去除多余空格与星号
description.splitEachLine() { line ->
    // 跳过表头行(首行含 || ||...)
    if (line.trim().startsWith('||')) return

    // 提取各列:利用 | 分割,去除首尾 |,再逐字段清理
    def cells = line.split('\|').collect { it.trim() }.findAll { it } // 过滤空字符串

    if (cells.size() >= 5) {
        def title = cells[0].replace('*', '').trim()
        def dueDate = cells[1].trim()
        def doneOn = cells[2].trim()
        def okNok = cells[3].trim()
        def remarks = cells[4].trim()

        actionItems <p>? <strong>核心要点与注意事项:</strong>  </p>
<ul>
<li>
<strong>不要预处理换行符</strong>:issue.getDescription() 返回的就是带 
 的原始字符串,Groovy 的 splitEachLine() 专为此设计,直接使用即可,无需 replaceAll “扁平化”。  </li>
<li>
<strong>避免过度依赖复杂正则</strong>:原问题中提供的 regex(如 /*?|+*?/)易受空白、嵌套星号干扰;改用 split('\|') + trim() 组合更清晰、可维护。  </li>
<li>
<strong>表头识别要显式</strong>:通过 line.trim().startsWith('||') 判断表头,比依赖行号更鲁棒(防止空行干扰)。  </li>
<li>
<strong>字段清洗不可少</strong>:Markdown 表格中 |*Task 1*| 需 replace('*', '') 并 trim(),否则 "*Task 1*" 会作为 title 写入 JSON。  </li>
<li>
<strong>空值容错</strong>:使用 findAll { it } 过滤空单元格,避免 IndexOutOfBoundsException。  </li>
</ul>
<p>? 总结:所谓“转为单行”,本质是消除换行符对解析流程的干扰。而 Groovy 的 splitEachLine() 正是为此场景优化的 API —— 它将多行字符串视为行序列,而非需人工拼接的单行字符串。坚持这一语义,代码更简洁、健壮性更高,也完全规避了因 
 
 差异引发的跨平台兼容问题。</p></map>
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11177

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8302

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7172

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1204

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

968

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1436

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2949

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20211

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1295

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习