我应该在Python中使用正则表达式吗?

3
我有一个字符串,像这样:

'cathy is a singer on fridays'

我想能够用其他动词替换第四个单词。
所以,
'cathy is a dancer on fridays'

我认为正确的方法是使用正则表达式,在第三个空格处停止,但是你可以使用正则表达式中的分组和 * 来接受任何字符。我似乎无法让它工作。
任何建议都会很有用。我是Python的新手,请不要评判。此外,正则表达式适合这种情况吗?还是应该使用其他方法?
谢谢

4
为什么 split() 对你不起作用?是否有其他限制? - thegrinner
7
歌手不是动词。 - Hoopdady
2
毫不否认,你正在问正确的问题(“我该如何做到这一点?正则表达式是正确的工具吗?”),而不是错误的问题(“我该如何使用正则表达式来做到这一点?”),所以加一分。 - roippi
@Hoopdady 哈哈,跳舞者也不是。 - SethMMorton
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方法。

1
通过替换所需的部分并拆分和连接字符串,您可以获得所需的内容。
stringlist = 'cathy is a singer on fridays'.split()
stringlist[3] = 'dancer'
print(' '.join(stringlist))

1
这里是使用反向引用和来自"re"模块的"sub"函数的解决方案。
文档 在这里
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

0
如果你只想要第三个单词,使用split/slice/join更容易:
mytext = 'cathy is a singer on fridays'

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

正则表达式可以做更复杂的事情,而且有一个re.split函数,可能有更快的方法来完成它,但这种方法是合理和易读的。


0
如果您已经知道要替换的单词在字符串中的位置,您可以简单地使用以下代码:
def replace_word(sentence, new_word, position):
    sent_list = sentence.split()
    sent_list[position] = new_word
    return " ".join(sent_list)

0

你可以使用split(' ')或像nltk这样的分词器来拆分字符串,后者可能还会为这个特定的用例提供一些更多的功能,例如词性分析。如果你想用随机职业名词替换它,可以寻找一个单词库。正则表达式对于你所需的内容来说过于复杂。


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