2024-06-23 19:54:12 发布
网友
我需要在ATK 30(它是一个变量,事实上,我有5个变量)的后面加上空格,这样可以避免多个空格:
ATK 30
s = "Product desingATK 30Trace back. TheATK 30 is a nice device. "
字符串的两端可以有空格,也可以没有空格,可以是字母、数字或任何东西
我可以按如下方式替换空格:
s = s.replace(" ", " ")
但是我如何用空格来包围我的文本呢
你可以用
re.sub(r'\s*(ATK 30)\s*', r' \1 ', text)
见regex demo
详细信息
\s*
\b
(ATK 30)
如果您有一个单词列表,并且需要一个动态构建的模式,请使用
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*'执行以下操作:
fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'
map(re.escape, keywords)
(
?
sorted(...,key=len,reverse=True)
"|".join(...)
你可以用
见regex demo
详细信息
\s*
-0+空格\b
-单词边界(ATK 30)
-捕获组1(使用替换模式中的{ATK 30
\s*
-0+空格如果您有一个单词列表,并且需要一个动态构建的模式,请使用
在这里,
fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'
执行以下操作:map(re.escape, keywords)
-转义每个关键字(以便(
或?
不能干扰任务)sorted(...,key=len,reverse=True)
-按长度降序排序(第一个选项总是“赢”,所以这是必要的)"|".join(...)
-创建交替模式李>相关问题 更多 >
编程相关推荐