更改字符串中的单词?

时间:2012-10-03 23:32:51

标签: python split isnumeric

我有这个任务:

  

编写一个函数smallnr(x),其中xx0为{。}}   6x之间的整数,它返回数字的名称,   否则它只是将def smallnr(x): if x>6: return str(x) else: lst=['zero','one','two','three','four','five','six'] return (lst[x]) 作为字符串返回。

我做了以下事情:

smallnr

这是有效的,但现在我必须这样做:

  

使用a部分的函数convertsmall(s),编写一个函数   s将文本s作为输入并返回文本   split()将小数字(0到6之间的整数)转换为它们的数字   名。例如,

     
    
      

转变小('我有5个兄弟和2个姐妹,共有7个兄弟姐妹。')               “我有五个兄弟和两个姐妹,一共有七个兄弟姐妹。”

    
  

我知道我需要以某种方式使用isnumeric()和{{1}},但我无法弄清楚如何将它们放在一起并仅更改字符串中的数字。

有什么建议吗?

5 个答案:

答案 0 :(得分:0)

  1. 拆分句子(在空格处)
  2. 通过单词(来自拆分)迭代
  3. 如果单词isnumeric将其替换为函数
  4. 的结果
  5. 将他们全部加在一起
  6. 返回结果

答案 1 :(得分:0)

所以你想把你传递给convertmall函数的句子串并用空格分割。您可以通过使用字符串并调用.split(' ')(例如'hello world'.split(' ')mystring.split(' '))来执行此操作。这将为您提供像['hello', 'world']

这样的拆分数组

然后你需要遍历生成的数组并查找数字或整数然后将它们传递给你的函数并获取字符串值并用字符串值替换数组中的值。

然后,在完成每个单词并转换数字后,您需要将最终数组连接起来。您可以通过' '.join(myArray)

执行此操作

答案 2 :(得分:0)

d={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six'}
parts = my_string.split() #split into words
new_parts = [d[p] if p in d else p for p in parts] #list comprehension to replace if possible
print " ".join(parts) #rejoin 

我认为会起作用

>>> mystring = 'I have 5 brothers and 2 sisters, 7 siblings altogether.'
>>> parts = mystring.split() #split into words
>>> d={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six'}
>>> new_parts = [d[p] if p in d else p for p in parts] #list comprehension to replace if possible
>>> print " ".join(new_parts) #rejoin
I have five brothers and two sisters, 7 siblings altogether.

答案 3 :(得分:0)

基于正则表达式而不是split()的解决方案:

def convertsmall(s):
    out = ''
    lastindex=0
    for match in re.finditer("\\b(\\d+)\\b", s):
        out += s[lastindex:match.start()]
        out += smallnr(int(match.group()))
        lastindex = match.end()
    return out + s[lastindex:]

答案 4 :(得分:0)

这是最简单的方法(在我看来):

def convertsmall(text):
    return ' '.join(smallnr(int(word)) if word.isdigit() else word for word in text.split())

输出:

>>> convertsmall('I have 5 brothers and 2 sisters, 7 siblings altogether.')
'I have five brothers and two sisters, 7 siblings altogether.'

要理解这一点,让我们倒退:

  1. 使用list将字符串分成text.split()个单词 - 当没有传递参数时,split()使用' '(空格)作为分隔符来划分字符串。
  2. smallnr(int(word)) if word.isdigit() else word - 如果smallnr()是数字,则调用word,否则返回word不变。
  3. 由于word是一个字符串,我们需要在将它传递给您的函数之前使用int(word)将其转换为整数,该函数假定x为整数。
  4. 整个短语是一个列表理解,它处理word中的每个text.split()以生成新列表。我们使用''.join(list)将这个列表中的word加在一起,用空格分隔。
  5. 希望明确表示:)