【问题标题】:How to find tables from JIRA issue description field如何从 JIRA 问题描述字段中查找表
【发布时间】:2021-12-29 09:18:56
【问题描述】:

我有一个关于如何在 Jira 问题描述字段中查找表格开头和结尾的问题。

就我而言,一张票中有三个可能的表。

|| Responsible | abc|
|| Departement | def |

|| SystemA Username | ghi |
|| Operation | READ |
|| Page | [Example|http://www.example.com] |

|| SystemB Username | jhk |
|| Operation | WRITE |
|| App | helloWorld |

现在我没有找到解决方案如何找到描述中的所有表以及如何找出表是哪种类型(负责、A 或 B)

From the JIRA API 将返回一个字符串 (Java)。我认为正则表达式应该是首选。

在我的第一个版本中,我只知道如何找到表格的开头和结尾

^\|\| \|$

是否可以分别找到所有三个表?我可以将内容放入键/值集合吗?

【问题讨论】:

    标签: java regex jira


    【解决方案1】:

    要在单独的匹配中获取所有 3 个表,您可以使用:

    ^\|\|.*\|(?:\R\|\|.*\|)*$
    

    Regex demo

    您可以通过例如首先拆分所有空行来获取所有 3 个具有键值对的表。

    然后,您可以使用带有 \G 锚点的每个表的模式来获取 2 个捕获组中的值,您可以将它们添加到键/值集合中。

    \G\|\|\h*(.*?)\h*\|\h*(\[[^\]\[]*\]|.*?)\h*\|\R?
    
    • \G在上一场比赛结束时断言位置
    • \|\|\h* 匹配 || 和可选空格
    • (.*?) 捕获组 1,尽可能少地匹配不带换行符的字符
    • \h*\|\h* 匹配 | 被可选空格包围
    • ( 捕获第 2 组
      • \[[^\]\[]*\] 匹配从开始到结束的方括号
      • |或者
      • .*? 尽可能少地匹配不带换行符的字符
    • )关闭第二组
    • \h*\| 匹配可选空格和|
    • \R? 匹配可选换行符

    查看regex demoJava demo

    例如

    HashMap<String,String> m = new HashMap<String,String>();
    String regex = "\\G\\|\\|\\h*(.*?)\\h*\\|\\h*(\\[[^\\]\\[]*\\]|.*?)\\h*\\|\\R?";
    String string = "|| Responsible | abc|\n"
            + "|| Departement | def |\n\n"
            + "|| SystemA Username | ghi |\n"
            + "|| Operation | READ |\n"
            + "|| Page | [Example|http://www.example.com] |\n\n"
            + "|| SystemB Username | jhk |\n"
            + "|| Operation | WRITE |\n"
            + "|| App | helloWorld |";
    
    Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);       
    
    for (String s : string.split("(?m)^\\s*$")) {
        Matcher matcher = pattern.matcher(s.trim());
        while (matcher.find()) {
            m.put(matcher.group(1), matcher.group(2));
        }
    }
    
    for(Map.Entry<String, String> entry : m.entrySet()){
        System.out.println(entry.getKey() + " --> " + entry.getValue());
    }
    

    输出

    App --> helloWorld
    SystemB Username --> jhk
    Departement --> def
    SystemA Username --> ghi
    Page --> [Example|http://www.example.com]
    Operation --> WRITE
    Responsible --> abc
    

    【讨论】:

    • 我发现这并不容易。现实看起来像这样demo。表格内有一个换行符。我尝试了积极的前瞻 ((?=\|\n) 或 (.|\n)* 但我无法在非捕获组之前在正则表达式内获得换行符。你能再帮我一次吗?
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2019-11-28
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多