我有一个这样的单词模式:
*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth
我只想在单词“ you”用单词“ we”代替它时,用“ we”代替。
我尝试使用单词边界功能,但仅在将文本分隔为单词时有效,并且在我的情况下,使用下划线,星号等形成图案
import re
s = "*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth"
re.sub(r'\you\b', 'we', s)
在上面的示例中,我希望单词看起来像这样:
*_we_don't_* think_we_don't_* we_don't_*_* we_don't_know_your_youth
用代码,我写到我无法达到那个结果。
答案 0 :(得分:1)
尝试使用正则表达式:(?<=\b|_)you(?=\b|_)
答案 1 :(得分:1)
[a-zA-Z] - Matches anything that is a single character
![a-zA-Z] - Anything that is not a single English character
? - One or zero match of pattern
(?<![a-zA-Z])you(?![a-zA-Z]) - This matches "you" if not preceded and
not followed by a letter
代码:
import re
s = "*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth"
print re.sub(r'(?<![a-zA-Z])you(?![a-z-Z])', 'we', s)
输出:
*_we_don't_* think_we_don't_* we_don't_*_* we_don't_know_your_youth
答案 2 :(得分:1)
答案 3 :(得分:0)
使用.replace()
:
s = "_you_don't_ think_you_don't_* you_don't__ you_don't_know_your_youth"
string.replace('_you_', '_we_').replace(' you_', ' we_')
输出
“ _ we_don't_ think_we_don't_ * we_don't__ we_don't_know_your_youth”
答案 4 :(得分:0)
我能想到的最简单的方法是将re.sub与反向引用组一起使用。您可以使用以下方法完成任务。
re.sub(r'([_|\s])(?:you)(_)', r"\1we\2", s)
在这里,它是([_|\s])
中的第一组,第二组是(_)
。 (?:you)
是一个非捕获组。在替换字符串\ 1和\ 2中指的是上述组。因此,最终您的替换字符串变为<whatever character before you>we<whatever character after you>