python - 如何用空格包围文本?
问题描述
我需要ATK 30
在以下文本中用空格包围(它是一个变量,实际上我有 5 个变量),以避免出现多个空格:
s = "Product desingATK 30Trace back. TheATK 30 is a nice device. "
字符串的两端可以有空格,也可以没有空格,可以有字母、数字等。
我可以按如下方式替换空格:
s = s.replace(" ", " ")
但是我怎样才能用空格包围我的文本呢?
解决方案
您可以使用
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(...)
- 创建交替模式。
推荐阅读
- ibm-cloud - 该操作未能生成或定位二进制文件。有关详细信息,请参阅日志
- flutter - 缩放后平移不在同一位置?
- javascript - 固定按钮 ReactJS
- android - RecyclerView 输出值到 textview
- python - 在 django 中创建相关对象
- python - 将 csv 转换为 json 时,.append() 函数中的 KeyError
- java - 如何从 wsdl 和额外的 xsd:s 生成带有 jaxws-maven-plugin 的 java 客户端?
- git - git branch -v 总是卡在cmd
- javascript - 我们如何将 javascript 数组修改为数组对象?
- jquery-select2 - 在 EasyAdmin 中检测 Select2 的 onChange 事件