为了账号安全,请及时绑定邮箱和手机立即绑定

如何用空格包围文本?

如何用空格包围文本?

狐的传说 2024-01-24 16:18:31
我需要ATK 30在下面的文本中用空格包围(它是一个变量,实际上我有5个变量),这样就可以避免多个空格:s = "Product desingATK 30Trace back. TheATK 30 is a nice device. "字符串两端可以有空格,也可以没有,可以是字母、数字或任何东西。我可以按如下方式替换空格:s = s.replace("  ", " ")但是我怎样才能用空格包围我的文本呢?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您可以使用

re.sub(r'\s*(ATK 30)\s*', r' \1 ', text)

请参阅正则表达式演示

细节

  • \s*- 0+ 空格

  • \b- 单词边界

  • (ATK 30)\1- 捕获组 1(通过替换模式的反向引用来引用):ATK 30

  • \s*- 0+ 空格

如果您有一个单词列表并且需要动态构建的模式,请使用

import re

s = "Product desingATK 30Trace back. TheATK 30 is a nice device. "

keywords = ['ATK 30', 'PPK 50', 'HJF12 10']

pattern = fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'

print(pattern)                       # => \s*(HJF12\ 10|ATK\ 30|PPK\ 50)\s*

print(re.sub(pattern, r' \1 ', s))  

# => Product desing ATK 30 Trace back. The ATK 30 is a nice device. 

在这里,fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'执行以下操作:

  • map(re.escape, keywords)- 转义每个关键字(以便(?不能干扰任务)

  • sorted(...,key=len,reverse=True)- 按长度降序排序(第一个选择总是“获胜”,所以这是必要的)

  • "|".join(...)- 创建交替模式。


查看完整回答
反对 回复 2024-01-24
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信