将文本从 jira 转换为 markdown
Converting text from jira to markdown
我正在尝试将文本从 Jira 转换为 markdown,但我 运行 在尝试转换链接和文本颜色时遇到了问题:
{color:red}text in red{color}
到 <span style="color:red">text in red</span>
[Google|http://google.com]
到 [Google](http://google.com)
颜色的问题是我想保留颜色变量(这只适用于红色)。
这是我的代码,它可以工作,但它可能不是解决问题的最佳方法:
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):([^{}]+)}(.*?){}
并在替换中使用 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 你可以使用
\[([^][|]+)\|([^][]+)]
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?://[^][]+)]
我正在尝试将文本从 Jira 转换为 markdown,但我 运行 在尝试转换链接和文本颜色时遇到了问题:
{color:red}text in red{color}
到<span style="color:red">text in red</span>
[Google|http://google.com]
到[Google](http://google.com)
颜色的问题是我想保留颜色变量(这只适用于红色)。
这是我的代码,它可以工作,但它可能不是解决问题的最佳方法:
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):([^{}]+)}(.*?){}
并在替换中使用 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 你可以使用
\[([^][|]+)\|([^][]+)]
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?://[^][]+)]