【发布时间】:2021-11-05 15:55:54
【问题描述】:
我的代码:
import re
print(re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo coruna'))
print(re.sub(r'(?=(Deportivo))(?!.*\bla\b)','','Deportivo coruna'))
如果字符串中没有“la”,我有兴趣删除“Deportivo”。
例如:
re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo coruna')
返回 ['Deportivo'] 和
re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo la coruna')
返回 []
然而,
re.sub(r'(?=(Deportivo))(?!.*\bla\b)','','Deportivo coruna')
返回'Deportivo coruna',字符串不变。我很困惑为什么,请帮忙。
【问题讨论】:
-
Deportivo 是一个先行断言而不是匹配。摆脱
?=(....) -
这不是一个好主意,因为如果
la出现在deportivo之前,那么正则表达式就会匹配。 -
尝试将您的
""替换为 sub 中的其他内容 ("---") 以显示正在发生的事情。具体来说,因为这是一个前瞻而不是匹配,它匹配 Deportivo 的开头(尝试在 Deportivo 之前添加一些东西来证明这一点) -
谢谢@FrankYellin!成功了
-
@TimPietzcker。是啊,你说得对。有没有一种可以同时处理这两种方式的解决方案?但至少 OP 了解问题所在。