请问如何使用python的正则表达式提取url链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问如何使用python的正则表达式提取url链接?相关的知识,希望对你有一定的参考价值。
比如这个,如何将//之后的链接用正则表达式提取出来?谢谢!
//i0.hdslb.com/bfs/archive/33928d95e48c9bf6f5f7267402841e4da3e053d5.jpg
m=re.search(r\'//[0-9A-Za-z./]+\',url)
具体要考虑连接里的字符,以及其他地方的正文字符
参考技术A url是什么格式的,通常使用正则表达式提取就可以了。追问那请问如何具体操作呢。
如何使用正则表达式从字符串中提取第 n 个 URL?
【中文标题】如何使用正则表达式从字符串中提取第 n 个 URL?【英文标题】:How to extract nth URL from string using regex? 【发布时间】:2021-05-06 19:31:26 【问题描述】:我想使用正则表达式提取第二个 URL,我不能使用任何其他东西,到目前为止,我已经设法使用正则表达式从字符串中提取所有 URL,但它只是给出了第一个 URL。
fun main()
var text = "hello world https://www.google.com hello world https://www.***.com hello world https://www.test.com"
var regex = """((http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)"""
println(performRegex(text, regex))
private fun performRegex(text: String?, regex: String?): String?
val regexPattern = Regex("""$regex""")
return regexPattern.find(text.toString())?.value
电流输出:https://www.google.com
预期输出:https://www.***.com
【问题讨论】:
尝试使用 findAll 并获取第二项。 不改代码就可以了。该代码仅用于演示。它只需要使用正则表达式来处理 【参考方案1】:你可以使用
private fun performRegex(text: String?, regex: String?): String?
val regexPattern = Regex("""$regex""")
val matchList = regexPattern.findAll(text.toString()).mapit.value.toList()
return if (matchList.size >= 2) matchList[1] else null
fun main(args: Array<String>)
var text = "hello world https://www.google.com hello world https://www.***.com hello world https://w...content-available-to-author-only...t.com"
var regex = """(?:https?|ftp)://\S+"""
println(performRegex(text, regex))
请参阅online Kotlin demo。
正则表达式是(?:https?|ftp)://\S+
,它匹配http://
、https://
或ftp://
,然后是任何一个或多个非空白字符。
val matchList = regexPattern.findAll(text.toString()).mapit.value.toList()
部分查找所有匹配项并将结果映射到字符串列表。
如果匹配列表大小为两个或更多,return if (matchList.size >= 2) matchList[1] else null
部分返回找到的第二个匹配项,否则返回null
。
【讨论】:
代码仅供演示。我无法更改代码。它只需要使用正则表达式来处理 @VaibhavChopade 您将不得不修改代码,因为正则表达式是一个定义规则的字符串,匹配什么。搜索多少匹配是代码责任。(?:http|ftp)s?://\S++.*?((?:http|ftp)s?://\S+)
can work for you,但您仍然需要获取第 1 组的值。
@VaibhavChopade 当然,我已经展示了。或this way,正则表达式定义为var regex = """(?:http|ftp)s?://\S++.*?((?:http|ftp)s?://\S+)"""
,return 语句必须为return regexPattern.find(text.toString())?.groupValues?.getOrNull(1)
嗨@Wiktor,有没有办法只输出第二场比赛?我之前已经尝试过您的方法,但它会在两个 URL 之间输出整个文本...
@VaibhavChopade 我目前的解决方案就是如何获得第 N 场比赛。第二个。你不能用纯 Java 正则表达式得到它,你必须编辑你的代码。就是这样。以上是关于请问如何使用python的正则表达式提取url链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python/django 从字符串中提取 url?(使用正则表达式)
正则表达式使用 Python 从 HTML 中的 href 属性中提取 URL [重复]