正则表达式技术求助:提取匹配指定首尾的目标字符串
搞定正则匹配:提取指定开头和结尾的URL
嘿,作为正则新手不用发愁,我来一步步帮你实现这个需求!
首先,咱们明确要匹配的规则:必须以https://abcd.sample.com开头,同时以_fs?123456结尾的URL。针对这个需求,我们可以写出精准的正则表达式,再结合代码筛选出符合条件的字符串。
正则表达式解析
直接上能用的正则:
^https:\/\/abcd\.sample\.com.*_fs\?123456$
我来拆解每个部分的作用:
^:锚定字符串的起始位置,确保URL必须从指定前缀开始,不会出现前缀在中间的情况https:\/\/abcd\.sample\.com:转义后的固定前缀。因为.和/在正则里是特殊字符(.匹配任意字符,/是正则的分隔符),所以必须用\转义,才能匹配真实的网址字符.*:匹配任意数量的任意字符(除了换行),用来覆盖前缀和结尾之间的所有内容(比如示例里的/templates/cp/assets/img/1)_fs\?123456:转义后的固定结尾。这里的?是正则的量词(表示0或1次匹配),所以必须转义成\?,才能匹配URL里真实的问号$:锚定字符串的结束位置,确保URL必须以指定结尾结束,不会出现结尾之后还有其他内容的情况
代码示例(常用语言)
JavaScript版本
const urls = [ 'https://sample.com/templates/sample/assets/img/menu.png', 'https://abcd.sample.com/templates/cp/assets/img/1_fs?123456', 'https://sample.com/templates/cp/js/plugins/sample/sample.css' ]; // 创建正则对象(注意用双斜杠转义) const matchRegex = /^https:\/\/abcd\.sample\.com.*_fs\?123456$/; // 筛选符合条件的URL const matchedUrls = urls.filter(url => matchRegex.test(url)); console.log(matchedUrls); // 输出结果:["https://abcd.sample.com/templates/cp/assets/img/1_fs?123456"]
Python版本
import re urls = [ 'https://sample.com/templates/sample/assets/img/menu.png', 'https://abcd.sample.com/templates/cp/assets/img/1_fs?123456', 'https://sample.com/templates/cp/js/plugins/sample/sample.css' ] # 使用原始字符串r''避免额外转义 match_regex = r'^https://abcd\.sample\.com.*_fs\?123456$' # 列表推导式筛选匹配项 matched_urls = [url for url in urls if re.match(match_regex, url)] print(matched_urls) # 输出结果:['https://abcd.sample.com/templates/cp/assets/img/1_fs?123456']
小提醒
- 如果你的URL里可能包含换行符(虽然一般不会),可以把
.*换成[\s\S]*,这样就能匹配包括换行在内的所有字符 - 一定要记得转义特殊字符!如果漏掉
\,正则会匹配错误的内容(比如.会匹配任意字符,导致前缀匹配到其他类似网址)
内容的提问来源于stack exchange,提问作者victor_gu
相关产品推荐
相关产品推荐

