python 正则表达式无法识别 Markdown 链接

2023-12-21

我正在尝试用 python 编写一个正则表达式来查找 Markdown 文本字符串中的 url。 找到 url 后,我想检查它是否被 markdown 链接包裹:text 我对后者有疑问。我正在使用正则表达式 - link_exp - 进行搜索,但结果不是我所期望的,并且无法理解它。

这可能是我没有看到的简单事情。

这是 link_exp 正则表达式的代码和解释

import re

text = '''
[Vocoder](http://en.wikipedia.org/wiki/Vocoder )
[Turing]( http://en.wikipedia.org/wiki/Alan_Turing)
[Autotune](http://en.wikipedia.org/wiki/Autotune)
http://en.wikipedia.org/wiki/The_Voder
'''

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text) #find all urls
for url in urls:
    url = re.escape(url)
    link_exp = re.compile('\[.*\]\(\s*{0}\s*\)'.format(url) ) # expression with url wrapped in link syntax.     
    search = re.search(link_exp, text)
    if search != None:
        print url

# expression should translate to:
# \[ - literal [
# .* - any character or no character 
# \] - literal ]
# \( - literal (
# \s* - whitespaces or no whitespace 
# {0} - the url
# \s* - whitespaces or no whitespace 
# \) - literal )
# NOTE: I am including whitespaces to encompass cases like [foo]( http://www.foo.sexy   )  

我得到的输出只是:

http\:\/\/en\.wikipedia\.org\/wiki\/Vocoder

这意味着表达式仅查找右括号之前带有空格的链接。 这不仅是我想要的,而且只应考虑一种没有空格的链接。

你认为你能在这件事上帮我吗?
cheers


这里的问题是你的正则表达式首先提取 URL,其中包括)在 URL 内。这意味着您要查找右括号两次。除了第一个之外,所有的事情都会发生这种情况(空间可以节省你的时间)。

我不太确定你的 URL 正则表达式的每个部分试图做什么,但那部分说:[$-_@.&+],包括从$(ASCII 36) 至_(ASCII 137),其中包含大量您可能不想要的字符,包括).

与其先查找 URL,然后检查它们是否在链接中,为什么不同时执行这两项操作呢?这样你的 URL 正则表达式就可以变得更懒,因为额外的约束使它不太可能是其他东西:

# Anything that isn't a square closing bracket
name_regex = "[^]]+"
# http:// or https:// followed by anything but a closing paren
url_regex = "http[s]?://[^)]+"

markup_regex = '\[({0})]\(\s*({1})\s*\)'.format(name_regex, url_regex)

for match in re.findall(markup_regex, text):
    print match

Result:

('Vocoder', 'http://en.wikipedia.org/wiki/Vocoder ')
('Turing', 'http://en.wikipedia.org/wiki/Alan_Turing')
('Autotune', 'http://en.wikipedia.org/wiki/Autotune')

如果您需要更严格,您可以改进 URL 正则表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 正则表达式无法识别 Markdown 链接 的相关文章

随机推荐

  • 四分之一圆形状,容器在颤动

    我想要一个四分之一圆形的容器 想象一下整个披萨的四分之一片 我该如何实现这一目标 基本上 我想使用堆栈小部件将其放置在右下位置的另一个容器的顶部 圆形部分朝内 并且角度当然与底部容器的右下角相匹配 Thanks 您可以使用CustomPai
  • 在 CSS 样式表之间切换

    因此 与其他问题不同 我想使用这里的代码 如何使用 jQuery 切换 CSS 样式表 https stackoverflow com questions 7846980 how do i switch my css stylesheet
  • 防止 SKNode 相互施加力量

    我有两个SKNode对象 当它们碰撞时 它们的位置会发生变化 我怎样才能防止这种情况发生 同时 我仍然希望能够通过以下方式回复他们的联系 void didBeginContact 我尝试设置他们的mass财产给0 0f但这没有用 您可以通过
  • Xgrid 与 Xcode 并行编译的配合效果如何?

    我对使用 Xgrid 来加速跨多台机器编译 Xcode 的想法很感兴趣 但似乎很难找到有关人们使用它的经验 任何陷阱等的任何信息 我 没有多台 Mac我现在就可以测试它 所以我很好奇 你尝试过吗 它对你来说效果如何 您看到过什么样的加速 我
  • 不间断 utf-8 0xc2a0 空格和 preg_replace 奇怪的行为

    在我的字符串中 我有 utf 8 不间断空格 0xc2a0 我想用其他东西替换它 当我使用 str preg replace xc2 xa0 X str 它工作正常 但是当我使用 str preg replace x C2A0 siu W
  • Postgres 列名或表名何时需要引号,何时不需要?

    让我们考虑以下 postgres 查询 SELECT FROM MY TABLE WHERE bool var FALSE AND str var something 当我删除周围的引号时 查询无法正确响应 str var 但当我做同样的事
  • 如何使用我们的 T4 模板生成器包含自定义实用程序类?

    如何使用我们的 T4 模板生成器包含自定义实用程序类 我尝试向项目添加一个模块 但似乎无法将其包含在内 以便我的生成器使用其中的方法 Thanks 您无法从模板访问项目中的任何代码 即使可以 它会如何执行 该模板在设计时执行 使用 Inhe
  • 运行 selenium 独立服务器和集线器/节点设置有什么区别

    我从 selenium 独立服务器设置开始 java jar selenium server standalone 2 32 0 jar 这使我能够成功连接并运行我的测试 同时运行多个浏览器 当我使用以下设置作为集线器时有什么区别 java
  • DropDownList 的 SelectedIndexChanged 事件未触发

    我的网页中有一个 DropDownList 对象 当我单击它并选择不同的值时 没有任何反应 即使我有一个函数连接到SelectedIndexChanged event 首先 实际对象的 HTML 代码
  • 在 Axis2 中创建自定义异常

    我正在使用 Axis2 1 5 2 和 Eclipse 我使用 Eclipse 生成 WSDL 并根据生成的 WSDL 生成客户端代码 我创建了一个我的服务可以抛出的自定义异常 创建网络服务时一切看起来都正常 Web 服务成功启动 我可以通
  • Golang 模板变量 isset

    我创建了一个函数来检查变量是否已定义 fm isset func a interface bool if a nil a a 0 fmt Println is not set return false fmt Println is set
  • IE8 预期标识符错误

    IE 7 和 8 抛出错误 通过 jQuery 预期标识符 jQuery document ready function jQuery i18n properties name messages path myproject js i18n
  • 请提供 ENGINE 值 Django 数据库配置

    伙计们 我很困惑 我已经安装了 Django 并正常运行服务器 但是当尝试配置数据库并运行 db 同步命令时 它崩溃 返回我的 ENGINE 参数不正常 但设置文件正常 按照设置文件操作 DATABASES default ENGINE d
  • 嵌入式 Jetty - IllegalStateException:没有 SessionManager

    我在谷歌上找到了很多关于这个问题的参考 但没有答案 我正在使用最新版本的 jetty 8 1 2 v20120308 但我似乎无法获得能够使用会话的嵌入式 servlet 当然 该示例是用 scala 编写的 但任何 java 程序员都应该
  • 突然无法推送到heroku:“无法协商密钥交换方法”

    git Push heroku 突然失败了 我安装了 Node js 我认为它可能升级了一些东西并以某种方式破坏了它 我读过所有类似的帖子 它没有告诉我 提供 了哪个交换 并且一切看起来都匹配 但是调用失败 我不知所措 我成功执行了hero
  • asp.net mvc 单选按钮状态

    我正在为一个新项目尝试 asp net mvc 并且遇到了一些奇怪的事情 当我对文本框使用 MVC UI 帮助程序时 这些值在调用之间会保留下来 但是 当我使用一系列单选按钮时 选中状态不会持续存在 这是我认为的一个例子 li li
  • 在任何打开的工作簿中检测刚刚停用的工作表中的选择类型

    我想要一个方法来查询 改变后ActiveSheet 编辑 任何开放的Workbook 检测类型Selection在上一个活动表中 最重要的是 如果它是ChartObject or Range 如果它是一个Range 获取地址 这可能吗 ED
  • 无法从数据存储实体访问 ID 属性

    使用 Google App Engine SDK 和 Python 我遇到一个问题 我无法访问给定实体属性的 ID 属性 我可以访问的唯一属性是我的类模型中定义的属性 加上关键属性 请参阅下面的答案 class Question db Mo
  • pyproject.toml 文件的用途是什么?

    背景 我正准备尝试从 GitHub 下载的 Python 包 发现它没有setup py 所以我无法安装它 pip install e
  • python 正则表达式无法识别 Markdown 链接

    我正在尝试用 python 编写一个正则表达式来查找 Markdown 文本字符串中的 url 找到 url 后 我想检查它是否被 markdown 链接包裹 text 我对后者有疑问 我正在使用正则表达式 link exp 进行搜索 但结