将文本从 jira 转换为 markdown

Converting text from jira to markdown

我正在尝试将文本从 Jira 转换为 markdown,但我 运行 在尝试转换链接和文本颜色时遇到了问题:

颜色的问题是我想保留颜色变量(这只适用于红色)。

这是我的代码,它可以工作,但它可能不是解决问题的最佳方法:

import re

conversion_dict = {
    r"\]": ")",
    r"\|": "](",
    r"{color:red}": "<span style=\"color:red\">",
    r"{color}": "</span>"
}


def format_text_from_jira(comment_body):
    for pattern in conversion_dict:
        comment_body = re.sub(pattern, conversion_dict[pattern], comment_body)
    return comment_body

有谁知道更好的解决方案吗?

我会使用 re.sub 和适当的捕获组:

inp = "{color:red}text in red{color}"
regex = r'\{(.*?):(.*?)\}(.*?)\{\}'
output = re.sub(regex, r'<span style=":">text in red</span>', inp)
print(output)  # <span style="color:red">text in red</span>

对于特定的颜色,您可以使用 3 个匹配 color 的捕获组和对颜色的反向引用,一个 negated character class 匹配除 curly 之外的任何字符,一个非贪婪匹配匹配直到第一个出现匹配的结束部分。

{(color):([^{}]+)}(.*?){}

Regex demo

并在替换中使用 3 个捕获组。

import re

regex = r"{(color):([^{}]+)}(.*?){}"
s = "{color:red}text in red{color}"
subst = '<span style="\1:\2\">\3</span>)'
result = re.sub(regex, r'<span style=":"></span>', s)
print(result)

输出

<span style="color:red">text in red</span>

对于 link 你可以使用

\[([^][|]+)\|([^][]+)]

Regex demo

import re

regex = r"\[([^][|]+)\|([^][]+)]"
s = "[Google|http://google.com]"
subst = '<span style="\1:\2\">\3</span>)'
result = re.sub(regex, r'[]()', s)
print(result)

输出

[Google](http://google.com)

或者您可以使 link 部分更具体一些

\[([^][|]+)\|(https?://[^][]+)]