3

我有一个这样的字符串:

'cathy is a singer on fridays'

我希望能够用其他动词替换第四个单词

所以

'cathy is a dancer on fridays'

我认为正确的方法是使用正则表达式并在到达第三个空格时停止,但是您可以使用正则表达式和 * 进行分组,它接受任何字符。我似乎无法让它工作。

任何建议都会很有用。我是 Python 新手,所以请不要判断。正则表达式也适合这个,还是我应该使用其他方法?

谢谢

4

6 回答 6

2

不,不需要正则表达式。见下文:

>>> 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字符串的方法。

于 2013-10-22T20:46:50.427 回答
1

在替换所需的部分后,您可以通过拆分和连接字符串来获得所需的内容

stringlist = 'cathy is a singer on fridays'.split()
stringlist[3] = 'dancer'
print(' '.join(stringlist))
于 2013-10-22T20:46:00.753 回答
1

这是使用反向引用和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
于 2013-10-22T21:21:39.763 回答
0

如果你真的只想要第三个词,拆分/切片/加入更容易:

mytext = 'cathy is a singer on fridays'

mysplit = mytext.split(' ')
' '.join(mysplit[:3] + ['dancer',] + mysplit[4:])

regex 可以做更复杂的事情,并且有一个 re.split,并且可能有更快的方法来做到这一点,但这是合理且可读的。

于 2013-10-22T20:45:47.557 回答
0

您可以使用split(' ')或像 nltk 这样的分词器拆分字符串,它还可以通过词性分析为这个特定用例提供更多功能。如果您尝试用随机的专业名词替换它,请查找词库。正则表达式对于您需要的东西来说太过分了。

于 2013-10-22T20:46:00.003 回答
0

如果您已经知道要替换的单词在字符串中的位置,则可以简单地使用:

def replace_word(sentence, new_word, position):
    sent_list = sentence.split()
    sent_list[position] = new_word
    return " ".join(sent_list)
于 2013-10-22T20:46:00.083 回答