替换时替换功能不适用于python中的边界

时间:2020-08-20 13:16:12

标签: python regex

我只想用“替换”代替“订单”,而不是“订单”

import re
a = """order orders Order"""
x = a.replace(r"order","replace")
print(x)
#replace replaces

当我给定边界时,它也显示错误

import re
a = """order orders Order"""
x = a.replace(r'\b'+order+r'\b',"replace")
print(x)
#NameError: name 'order' is not defined

我只想替换订单,而不是订单。谁能帮助我。

我期望输出为: “”“替换订单订单”“”

3 个答案:

答案 0 :(得分:1)

使用re.sub和此正则表达式:

import re
a = """order orders Order"""
x = re.sub(r"order(?=[^s])","replace",a)
print(x)
  • [^s] ...字符不是“ s”
  • (?=...) ...前瞻,检查它是否为真(在这种情况下为“ s”),但不包含在比赛中

编辑:如果字符串以order结尾,则更好的正则表达式也可以工作:

import re
a = """order orders Order order"""
x = re.sub(r"order(?=$|[^s])","replace",a)
print(x)
  • $|[^s] ...字符串结尾还是不是“ s”

答案 1 :(得分:1)

您应该尝试以下解决方案。

import re
a = """order orders Order"""
x = re.sub(r"\border\b", "replace", a)
print(x)

答案 2 :(得分:0)

正如@Jan所建议的,我已经找到了答案。

import re
a = """order orders Order"""
x = re.sub(r"order(?=[^a-z])","replace",a)
print(x)

#replace order订单