检测python中markdown文件中的所有链接并将其替换为字符串函数的输出

2024-04-05

我有一个 python 函数f(foo: string) -> string。我不写该函数的详细信息,因为它可能会发生变化。

我需要得到all来自 Markdown 文件的链接并将其替换为该函数的结果。

示例:此链接

This is  a text and this [is first link](http://example.com "Example Title") and
 this [is a second](#example) link.

将替换为

This is  a text and this [is first link](result1 "Example Title") and
 this [is a second](result2) link.

where f(http://example.com)=result1 and f(#example)=result2。那是result1的输出是f(http://example.com) and result2的输出是f(#example).

我们可以用 python 正则表达式或某些具有 markdown 文件特征的特定包来执行此操作吗?


修改姆赖因哈特 https://stackoverflow.com/a/30738268/2755116回答这个问题,可以这样做:

def find_md_links(md):
    """Returns dict of links in markdown:
    'regular': [foo](some.url)
    'footnotes': [foo][3]
    
    [3]: some.url
    """
    # https://stackoverflow.com/a/30738268/2755116

    INLINE_LINK_RE = re.compile(r'\[([^\]]+)\]\(([^)]+)\)')
    FOOTNOTE_LINK_TEXT_RE = re.compile(r'\[([^\]]+)\]\[(\d+)\]')
    FOOTNOTE_LINK_URL_RE = re.compile(r'\[(\d+)\]:\s+(\S+)')

    links = list(INLINE_LINK_RE.findall(md))
    footnote_links = dict(FOOTNOTE_LINK_TEXT_RE.findall(md))
    footnote_urls = dict(FOOTNOTE_LINK_URL_RE.findall(md))

    footnotes_linking = []
        
    for key in footnote_links.keys():
        footnotes_linking.append((footnote_links[key], footnote_urls[footnote_links[key]]))

    return {'regular': links, 'footnotes': footnotes_linking}


def replace_md_links(md, f):
    """Replace links url to f(url)"""
    
    links = find_md_links(md)
    newmd = md

    for r in links['regular']:
        newmd = newmd.replace(r[1], f(r[1]))

    for r in links['footnotes']:
        newmd = newmd.replace(r[1], f(r[1]))
    
    return newmd

f是一个函数。例如,我使用此函数仅更改属于以下位置的链接# in replace_md_links

def mychange(s, prefix="/static/entrades/", suffix=".md.html"):
    """Change links from tiddlywiki syntax [foo](#something) to [foo](prefix + something + suffix)"""
    
    if s.startswith('#'):
        return prefix + slugify.slugify(urllib.parse.unquote( s.replace('#', '', 1) )) + suffix
    else:
        return s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测python中markdown文件中的所有链接并将其替换为字符串函数的输出 的相关文章

随机推荐

  • 使用多个参数记录

    我目前正在开发一个程序 其中我必须将所有输出写入日志文件 我需要编写一个日志方法 它应该按照我指定的顺序给出一个输出 其中包含级别 消息 对象值 另一条消息 一个整数值 另一条消息和另一个整数值 我似乎找不到执行此操作的日志方法 我在用Ja
  • 如何升级SQLite版本?

    我正在开发我的第一个应用程序 并使用以下代码查看我的 SQLite 版本 Cursor cursor SQLiteDatabase openOrCreateDatabase memory null rawQuery select sqlit
  • 如何设置 Eclipse 项目引用

    我的工作区中有一个 Web 项目 它依赖于工作区中的 java 项目 在项目引用中 我使我的 Web 项目引用了 java 项目 但仍然存在构建错误 表明我的 java 项目中的类未被我的 Web 项目引用 一个答案 这不是对您的问题的直接
  • Eclipse 找不到 MinGW。为什么?

    我都正确安装了 但是无论我是否正确设置编译器路径都没关系 因为它找不到 gcc 和 g 我用资源管理器检查过 它们位于正确的位置 我尽了一切努力 甚至以向后兼容模式并以管理员身份运行 Eclipse 编辑 如果 Eclipse 不能至少像用
  • 如何从 Javascript 或 Jquery 数组中选择随机值? [复制]

    这个问题在这里已经有答案了 我试图显示数组中的 3 个随机值 以下脚本仅从 javaScript 数组返回单个项目 var arrayNum One two three four five six seven eight nine var
  • 如何使用SessionState获取剩余会话超时时间?

    是否可以使用 ASP net 中的 sessionState 获取剩余会话超时 这是我的 webconfig 文件中的 sessionState 代码
  • 如何输出未包含在分组依据中的属性及其计数

    我在这里想要实现的是 我希望从该 LINQ 查询返回具有两个属性的列表 billNo 和同一 fromDate 上导入代码出现的次数 因此 这里我们的 billNo 1 和 2 都具有相同的导入代码 该导入代码在同一日期 01 01 202
  • 如何在 macOS 上将 libxml2 与 python 一起使用?

    我在 OSX Lion 上 安装了 libxml2 默认情况下 并且安装了 python 默认情况下 但它们不互相通信 在 Lion 上实现此功能的最简单方法是什么 python c import libxml2 Traceback mos
  • 在Ubuntu 18.04、Python 3.6.7 64位、Mono 5.16上安装pythonnet失败

    我想在 Ubuntu 上安装 pythonnet 但失败了 这就是我到目前为止所尝试的 usr bin python3 m pip install U pythonnet user Error Collection pythonnet Us
  • DOM 中两个元素之间的距离(以 px 为单位)

    如何获取 DOM 中两个元素之间的距离 我正在考虑使用获取边界客户端矩形 https developer mozilla org en US docs Web API Element getBoundingClientRect 但我不知道如
  • C# POCO 的 DbGeography 替代方案

    我正在编写一个应用程序 我需要查询某个位置半径内的记录 我一开始在 PCO 上只使用了一对经纬度属性 但意识到 SQL 中的空间搜索是针对地理列类型完成的 该地理列类型可转换为 POCO 中的 DbGeography 在另一篇 SO 帖子中
  • SharePoint 中的跨方法处置模式

    我编写了一个类 可以对 SharePoint 网站的内容进行各种修改 在该类中 我实现了一个惰性解析属性 private SPWeb rootSite get if site null SPSite site new SPSite url
  • 订阅 RSS 源

    我正在编写一个非常简单的 RSS 阅读器 它所需要做的就是获取 xml 文档 并将每个项目的标题和发布日期打印到控制台 我开始使用这两个问题 如何开始制作 C RSS 阅读器 https stackoverflow com question
  • Hbase连接zookeeper错误

    环境 Ubuntu 14 04 hadoop 2 2 0 hbase 0 98 7 当我启动hadoop和hbase 单节点模式 时 都成功 我还检查了hadoop的网站8088 hbase的网站60010 jps 4507 Seconda
  • 如果别名会降低运行时性能,为什么编译器要执行别名?

    我出于纯粹的兴趣而学习 C 和计算机科学主题 这让我对编译器产生了兴趣 我读过的所有内容都告诉我 别名会导致程序集输出速度变慢 需要在每次迭代时重新加载值 我已经能够使用 Intel C C 编译器使用该标志在一些基准测试中获得轻微的提高
  • Javascript/jQuery执行顺序问题

    我正在使用 jQuery 尝试从 JSON 对象构建 Web 应用程序的表 使用 asyncgetJson调用 并且我很难了解执行顺序的底部 我的JS是 create table header peopleDirectory append
  • 使用 node-fetch 时无法调用类型缺少调用签名的表达式

    我想得到node fetch在我的打字稿项目中工作 import as fetch from node fetch import as assert from assert export class DatabaseConfigurator
  • CoreAnimation,在 iOS 5 Xcode 4 中使用动画阴影移动 UIImageView

    我正在尝试为图像添加类似 假 3d 的效果 UIImageView 从 A 点移动到 B 点 在此移动过程中我希望在 C A B 2 点处使其具有最大的阴影尺寸 或较大的阴影偏移 所以看起来又在上下移动 当我尝试改变阴影大小时 它没有动画
  • 在 Visual Studio 2015 中强制执行 ANSI C 标准

    我试图让 Visual Studio 在编译项目时强制执行 ANSI C 标准 但我无法让它工作 有小费吗 我已阅读所有教程 启用了 Za 选项 并将文件命名为 c 而不是 cpp 但是 以下程序仍然可以成功构建 include
  • 检测python中markdown文件中的所有链接并将其替换为字符串函数的输出

    我有一个 python 函数f foo string gt string 我不写该函数的详细信息 因为它可能会发生变化 我需要得到all来自 Markdown 文件的链接并将其替换为该函数的结果 示例 此链接 This is a text