如何用空格包围文本?

2024-06-23 19:54:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在ATK 30(它是一个变量,事实上,我有5个变量)的后面加上空格,这样可以避免多个空格:

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

字符串的两端可以有空格,也可以没有空格,可以是字母、数字或任何东西

我可以按如下方式替换空格:

s = s.replace("  ", " ")

但是我如何用空格来包围我的文本呢


Tags: 字符串文本isdevice字母方式back数字
1条回答
网友
1楼 · 发布于 2024-06-23 19:54:12

你可以用

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

regex demo

详细信息

  • \s*-0+空格
  • \b-单词边界
  • (ATK 30)-捕获组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(...)-创建交替模式

相关问题 更多 >

    热门问题