正则表达式半匹配Markdown中的图片/链接格式

使用正则表达式匹配Markdown中的图片格式,判断文本是否是图片/链接的开头(不完整):

  1. 判断文本结尾是否符合Markdown中图片的格式要求
  • Markdown中图片的格式:![图片描述](图片链接)

  • 正则表达式:.*\!(\[([^[\]]*(\](\([^)]*)?)?)?)?$

def is_incomplete_image_markdown(s):
    """
    检查chunk是否是图片的部分
    :param s: chunk
    :return: True:是图片的局部(不完整) ,False: 非图片 或者 格式完整
    """
    partial_pattern = r'.*\!(\[([^[\]]*(\](\([^)]*)?)?)?)?$'
    return bool(re.match(partial_pattern, s, re.DOTALL))

# 输出True
print(is_incomplete_image_markdown("大事发生!"))
print(is_incomplete_image_markdown("大事发生!["))
print(is_incomplete_image_markdown("大事发生![lo"))
print(is_incomplete_image_markdown("大事发生![logo]"))
print(is_incomplete_image_markdown("大事发生![logo]("))
print(is_incomplete_image_markdown("大事发生![logo](https://toolshu.com/img/log"))

# 输出False
print(is_incomplete_image_markdown("大事发生![logo](https://toolshu.com/img/logo.png)"))  # 格式完整
print(is_incomplete_image_markdown("大事发生![logo](https://toolshu.com/img/logo.png)其他文本"))  # 格式完整
print(is_incomplete_image_markdown("大事发生![logo(https://toolshu.com/img/logo.png)"))  # 格式不规范
print(is_incomplete_image_markdown("大事发生!123"))  # 非图片
  1. 判断文本结尾是否符合Markdown中链接的格式要求
  • Markdown中年链接的格式:[文字说明](跳转链接)

  • 正则表达式:.*\[([^[\]]*(\](\([^)]*)?)?)?$

def is_incomplete_url_markdown(s):
    """
    检查chunk是否是链接的部分
    :param s: chunk
    :return: True:是链接的局部(不完整) ,False: 非链接 或者 格式完整
    """
    partial_pattern = r'.*\[([^[\]]*(\](\([^)]*)?)?)?$'
    return bool(re.match(partial_pattern, s, re.DOTALL))

# 输出True
print(is_incomplete_url_markdown("大事发生["))
print(is_incomplete_url_markdown("大事发生[too"))
print(is_incomplete_url_markdown("大事发生[toolshu]"))
print(is_incomplete_url_markdown("大事发生[toolshu]("))
print(is_incomplete_url_markdown("大事发生[toolshu](https://toolshu.com/"))

# 输出False
print(is_incomplete_url_markdown("大事发生[toolshu](https://toolshu.com/)"))  # 格式完整
print(is_incomplete_url_markdown("大事发生[toolshu](https://toolshu.com/)其他文本"))  # 格式完整
print(is_incomplete_url_markdown("大事发生[toolshu]](https://toolshu.com/)"))  # 格式不规范
print(is_incomplete_url_markdown("大事发生[toolshu(]123"))  # 格式不规范

适合使用大模型进行流式输出的场景,可以判断出是否是正在输出图片/链接,并进行相应的处理。

下面的示例代码,进行图片判断时对链接进行兼容(认为链接的格式也是图片,适应模型犯抽的情况),并将链接转换为图片格式,同时兼容 [![](url)]![![](url)]![[](url)] 等格式错误的情况。

import re

def is_incomplete_image_markdown(s):
    """
    检查chunk是否是图片的部分(兼容链接)
    :param s: chunk
    :return: True:是图片/链接的局部(不完整) ,False: 非图片/链接 或者 格式完整
    """
    partial_pattern = r'.*\[([^[\]]*(\](\([^)]*)?)?)?$'
    return s.endswith("!") or bool(re.match(partial_pattern, s, re.DOTALL))

def replace_markdown_link_with_image(s):
    """
    将markdown链接替换为图片链接
    :param s: 输入字符串
    :return: 替换后的字符串
    """
    pattern = r'[\!]?[\[]?[\!]?\[(.*?)\]\((.*?)\)[\]]?'
    result = re.sub(pattern, r'![\1](\2)', s)
    return result

if __name__ == '__main__':
    s = "测试文本 ![![logo](https://toolshu.com/img/logo.png)]其他文本"
    print(replace_markdown_link_with_image(s))
    # 输出:测试文本 ![logo](https://toolshu.com/img/logo.png)其他文本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄荷你玩_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值