将链接发布到删除标点符号的最佳方式之前。删除标点符号python
我正在创建一个madLib游戏,用一个名词,副词,动词,形容词等代替段落中的单词;它应该从一个单独的文件中取出一个随机单词,并在合适的地方将其打印到段落中,即将一个动词运行放入该段落指出VERB的位置。我遇到的唯一问题是当我要替换的单词旁边有标点时,我无法做到这一点。比如VERB,或者VERB!
我的问题是如何在保留标点的情况下替换所有这些值。
将链接发布到删除标点符号的最佳方式之前。删除标点符号python
我正在创建一个madLib游戏,用一个名词,副词,动词,形容词等代替段落中的单词;它应该从一个单独的文件中取出一个随机单词,并在合适的地方将其打印到段落中,即将一个动词运行放入该段落指出VERB的位置。我遇到的唯一问题是当我要替换的单词旁边有标点时,我无法做到这一点。比如VERB,或者VERB!
我的问题是如何在保留标点的情况下替换所有这些值。
noun1="Donkey"
print("This should print a %s here"%(noun1))
本质上,你可以得到你的输入变量,并像这个例子一样对待它们。
+1为例子名词 – RocketDonkey
不确定您的使用案例,但replace
与count
参数设置为1有效吗?
>>> test = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1)
'This is a running! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1).replace('VERB', 'swimming', 1).replace('VERB', 'sleeping', 1)
'This is a running! Whoa, a swimming? Yeah, a sleeping!#$%'
当然,您必须对重复次数进行一些调整,但它应该处理好标点符号。
按以下@ mgilson的建议,你可以通过执行类似删除多次呼吁要replace
:
In [14]: s = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'
In [15]: verbs = ['running', 'jumping', 'swimming']
In [16]: reduce(lambda x, y: x.replace('VERB', y, 1), verbs, s)
Out[16]: 'This is a running! Whoa, a jumping? Yeah, a swimming!#$%'
它使用reduce
功能对主串运行replace
,使用值verbs
作为要替换的那些。减少的最后一个参数是字符串本身,它将包含每次迭代中替换的结果(并且在开始时将是'普通'字符串)。
Argv!我只是输入这个(+1)。你甚至可以摆脱'test.replace()。replace()。replace()...'使用'reduce' :) – mgilson
@mgilson哈哈,我正在引导我的内心mgilson。 – RocketDonkey
@mgilson我可以放心地说,你说这让我试着更好地理解减少。更新与我认为的工作,并一如既往,感谢推动我的想法:) – RocketDonkey
使用re模块的子功能。捕获单词后面的字符,然后将新单词替换单词,采用反向引用追加拍摄的标点符号:
>>> import re
>>> s = "VERB,"
>>> print re.sub(r'VERB([\,\!\?\;\.]?)', r'newword\1', s)
newword,
可以展开字符类[\,\!\?\;\.]
包括你会遇到什么标点符号,这只是一个例子。
您是否必须将空白格式设置为UPPERCASE_PART_OF_SPEECH?如果可以,请尝试将其更改为“{词性}”。 (即“这是一个{动词}!')。 Python有一个非常全面的字符串格式化程序,可以完美地处理像这样的事情。 –