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

时间:2013-10-22 20:41:56

标签: python regex

我有一个像这样的字符串:

'cathy is a singer on fridays'

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

所以

'cathy is a dancer on fridays'

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

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

谢谢

6 个答案:

答案 0 :(得分: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 :(得分:1)

您可以在替换所需的片段

之后通过拆分和连接字符串来获得所需的内容
stringlist = 'cathy is a singer on fridays'.split()
stringlist[3] = 'dancer'
print(' '.join(stringlist))

答案 2 :(得分:1)

以下是使用反向引用和sub

中的re函数的解决方案

文档here

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

答案 3 :(得分:0)

如果您真的只想要第三个单词,则分割/切片/连接更容易:

mytext = 'cathy is a singer on fridays'

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

正则表达式可以做更复杂的事情,并且有一个re.split,并且可能有更快的方法来实现它,但这是合理的和可读的。

答案 4 :(得分:0)

您可以使用split(' ')分割字符串,也可以使用像nltk这样的标记器来分割字符串,这也可能为这个特定用例提供更多功能,并进行词性分析。如果你试图用随机的专业名词替换它,那就找一个单词库。正则表达式对你所需要的东西来说太过分了。

答案 5 :(得分:0)

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

def replace_word(sentence, new_word, position):
    sent_list = sentence.split()
    sent_list[position] = new_word
    return " ".join(sent_list)