Python re 如何在特定单词后添加空格?

3

我试着在单词'Flavor'后添加空格,但是每个字母后面都会有一个空格。
这是我的代码:

re.sub(r'(?<=["Flavor"])(?=[^\s])', r' ', short_description)

我的Python shell结果:

>>> 'F l a v o r BLACKWATER OG (I), APPLE JACK (S), BLACKBERRY KUSH (I), SOUR TANGIE (S), SUNSET GELATO (H)'

我期望获得这个结果:
>>> 'Flavor BLACKWATER OG (I), APPLE JACK (S), BLACKBERRY KUSH (I), SOUR TANGIE (S), SUNSET GELATO (H)'

5
为什么不只是用short_description.replace('Flavor', 'Flavor ')?这并不是一个正则表达式的问题。 - Tim Roberts
@Tim Roberts,感谢您的建议,但我们能用正则表达式来做吗? - boyenec
我支持Tim。你代码中的特定问题是[chars]表示“任意一个字符 c,h,a,r,s”。如果你想精确匹配文本,请使用chars(不包含方括号)。 - koorkevani
re.sub(r'(?<=Flavor\s)', r' ', short_description) or just re.sub(r'(?<=Flavor )', r' ', short_description) - Peter Trcka
1
除非你需要正则表达式,否则不应使用它。与简单的字符串搜索相比,正则表达式的开销较大。 - Tim Roberts
1个回答

3
使用下面所示的正则表达式和re.sub,将每个后跟0个或多个空格字符的Flavor替换为具有Flavor (在Flavor之后恰好有1个空格)的字符串:
import re
short_descriptions = [
    'FlavorBLACKWATER OG',
    'Flavor BLACKWATER OG',
    'Flavor  BLACKWATER OG'
]
for short_description in short_descriptions:
    print(re.sub(r'Flavor\s*', r'Flavor ', short_description))

输出:

Flavor BLACKWATER OG
Flavor BLACKWATER OG
Flavor BLACKWATER OG

请注意,上面的正则表达式完全避免了回顾后断言((?<=Flavor ))。
还要注意,如上面的评论者所提到的,你使用的正则表达式指定了字符类["Flavor"],因此在这些指定的字符之后添加一个空格:", F, l, a, v, o, r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接