[英]Positive Lookbehind Stripping Out Metacharacters
我需要在 label csv 文件的许多 URL 末尾获取序列。 我采用的方法给了我想要的结果,但我很难理解如何使用积极的后视来捕获 url 中“系列”一词之后的所有字符,同时忽略任何元字符? 我知道我可以使用 re.sub() 删除它们,但是,我有兴趣了解如何在一个正则表达式中完成整个过程。
我已经搜索了许多关于如何做到这一点的帖子,并尝试了许多不同的方法,但我一直无法弄清楚。 主要是将(?<=series\-)
之后的.+
替换为否定它的东西-
但它没有奏效。
url = 'https://yanmarshop.com/en-GB/catalog/all/browse/yanmardata-1019044/yanmar-marine-marine-main-engine-small-qm-series-kbw-10a'
res = re.search(r"(?<=series\-).+", url).group(0)
re.sub('-', '', res)
Which gives the desired result 'kbw10a'
是否可以在积极的后视中去除元字符“-”? 如果没有环视,有没有更好的方法?
更多示例;
'https://yanmarshop.com/en-GB/catalog/all/browse/yanmardata-1014416/yanmar-marine-marine-main-engine-small-qm-series-kbw10',
'https://yanmarshop.com/en-GB/catalog/all/browse/yanmardata-1019044/yanmar-marine-marine-main-engine-small-qm-series-kbw-10a',
'https://yanmarshop.com/en-GB/catalog/all/browse/yanmardata-1018923/yanmar-marine-marine-main-engine-small-qm-series-kh18-a',
您不能以您描述的方式在环顾四周“忽略”字符,因为为了匹配字符串的一部分,正则表达式引擎需要从左到右使用该部分,匹配正则表达式中的所有后续子模式。
实现这一点的唯一方法是通过额外的步骤,在找到匹配项后删除连字符。 请注意,您不需要另一个正则表达式来删除连字符, .replace('-', '')
就足够了:
url = 'https://yanmarshop.com/en-GB/catalog/all/browse/yanmardata-1019044/yanmar-marine-marine-main-engine-small-qm-series-kbw-10a'
resObj = re.search(r"series-(.+)", url)
if resObj:
res = resObj.group(1).replace('-', '')
请注意,首先运行re.search
获取匹配数据 object然后访问 .group .group()
会更安全,否则,当没有匹配时,您可能会遇到异常。
此外,模式中不需要任何环视,捕获组也可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.