繁体   English   中英

去除元字符的积极后视

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM