python中加法的代码连字符_Python正则表达式,用于删除小写字符之间的连字符

日间;夜间:>>> re.sub('([a-z])-(?=[a-z])', r'\1', 'oblig-a-tory hyphen-ated Asia-Pacific 11-12')

'obligatory hyphenated Asia-Pacific 11-12'

或者

^{pr2}$

上下文替换(“查找由小写字母包围的所有连字符”)的主要复杂情况是尾部上下文(要匹配的模式后面的部分)不能包含在匹配中。如果是,它将不能参加下一场领先的比赛。在

举个例子可能会让这一点更清楚。在

天真的解决方案是>>> re.sub('([a-z])-([a-z])', r'\1\2', 'hyphen-ated Asia-Pacific 11-12')

'hyphenated Asia-Pacific 11-12'

它与问题中的调用不同,因为它匹配连字符周围的小写字母,捕获它们以便将它们重新插入到结果中。在本例中,模式匹配的唯一子字符串是n-a,它被正确地替换为na。在

但假设我们有两个连字符靠得更近,像这样:>>> re.sub('([a-z])-([a-z])', r'\1\2', 'oblig-a-tory hyphen-ated Asia-Pacific 11-12')

'obliga-tory hyphenated Asia-Pacific 11-12'

a是匹配g-a的一部分,搜索在a之后的-处恢复。所以它从来没有看到过a-t的模式,它本来会匹配的。在>>> re.sub('([a-z])-(?=[a-z])', r'\1', 'oblig-a-tory hyphen-ated Asia-Pacific 11-12')

'obligatory hyphenated Asia-Pacific 11-12'

现在后面的上下文(连字符后面的小写字母)不是匹配的一部分,因此我们不需要在替换中重新插入它。这意味着,在将g-与尾随a匹配后,搜索将从a开始,下一个匹配将是{},后面是{}。在

Python还可以执行“lookbehinds”,即只有在模式前面有另一个模式时,模式才会匹配。同时使用lookback和lookahead,我们可以写下:

^{pr2}$

这也会产生正确的答案。现在我们只是匹配连字符,但坚持它的前面和后面都是小写字母。因为匹配只是连字符,所以替换字符串可以是空的。在

有时用这样的后视加速比赛。有时它会减慢速度。如果速度对你很重要,那么用特定的模式做一个基准测试总是值得的。但首要任务是把比赛弄对。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值