我有一个这样的字符串:
'cathy is a singer on fridays'
我希望能够用其他动词替换第四个单词
所以
'cathy is a dancer on fridays'
我认为正确的方法是使用正则表达式并在到达第三个空格时停止,但是您可以使用正则表达式和 * 进行分组,它接受任何字符。我似乎无法让它工作。
任何建议都会很有用。我是 Python 新手,所以请不要判断。正则表达式也适合这个,还是我应该使用其他方法?
谢谢
不,不需要正则表达式。见下文:
>>> mystr = 'cathy is a singer on fridays'
>>> x = mystr.split()
>>> x
['cathy', 'is', 'a', 'singer', 'on', 'fridays']
>>> x[3] = "dancer"
>>> x
['cathy', 'is', 'a', 'dancer', 'on', 'fridays']
>>> " ".join(x)
'cathy is a dancer on fridays'
或者,更紧凑:
>>> mystr = 'cathy is a singer on fridays'
>>> x = mystr.split()
>>> " ".join(x[:3] + ["dancer"] + x[4:])
'cathy is a dancer on fridays'
>>>
这里的核心原理是.split
字符串的方法。
在替换所需的部分后,您可以通过拆分和连接字符串来获得所需的内容
stringlist = 'cathy is a singer on fridays'.split()
stringlist[3] = 'dancer'
print(' '.join(stringlist))
这是使用反向引用和sub
函数的解决方案re
文档在这里
import re
msg = 'cathy is a singer on fridays'
print re.sub('(\w+) (\w+) (\w+) (\w+)', r'\1 \2 \3 dancer', msg, 1)
输出
>>> cathy is a dancer on fridays
如果你真的只想要第三个词,拆分/切片/加入更容易:
mytext = 'cathy is a singer on fridays'
mysplit = mytext.split(' ')
' '.join(mysplit[:3] + ['dancer',] + mysplit[4:])
regex 可以做更复杂的事情,并且有一个 re.split,并且可能有更快的方法来做到这一点,但这是合理且可读的。
您可以使用split(' ')
或像 nltk 这样的分词器拆分字符串,它还可以通过词性分析为这个特定用例提供更多功能。如果您尝试用随机的专业名词替换它,请查找词库。正则表达式对于您需要的东西来说太过分了。
如果您已经知道要替换的单词在字符串中的位置,则可以简单地使用:
def replace_word(sentence, new_word, position):
sent_list = sentence.split()
sent_list[position] = new_word
return " ".join(sent_list)