【问题标题】:Find Digit and Append Number Word to String Using Regex in Python在 Python 中使用正则表达式查找数字并将数字字附加到字符串
【发布时间】:2019-02-18 20:17:20
【问题描述】:

我正在尝试查找输入字符串中的任何数字,然后在字符串末尾附加每个数字的英文单词。 但是,我的代码抛出错误can't assign to function call

import re

def to_eng(s):

    words = {"0":"zero","1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine"}
    k = re.findall(r"[0-9]",s)
    for i in k:
        w = words.items(), key=lambda x: x[0]
    print(s + w)

s = "I want to buy 17 cars."
to_eng(s)

我希望我的输出是:I want to buy 17 cars. one seven

【问题讨论】:

    标签: python regex dictionary for-loop


    【解决方案1】:

    我会这样做:

    import re
    s = "I want to buy 17 cars."
    words = {"0":"zero","1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine"}
    k = re.findall(r"[0-9]",s)
    w = ' '.join([words[i] for i in k])
    print(w) #one seven
    

    此解决方案使用所谓的list 理解,这允许比使用for 循环更简洁的代码。

    【讨论】:

      【解决方案2】:

      提示:这里缺少一些东西(可能是函数调用?)

      for i in k:
          w = words.items(), key=lambda x: x[0]
          #  ^                                 ^
      print(s + w)
      

      但您可以将其更改为:

      def to_eng(s):
          words = {"0":"zero","1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine"}
          rx = re.compile(r'\d')
          for m in rx.finditer(s):
              s = s + " " + words[m.group(0)]
          print(s)
      

      产量

      I want to buy 17 cars. one seven
      


      或者 - 甚至更好 - 完全使用列表:
      def to_eng(s):
          words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
          rx = re.compile(r'\d')
      
          return s + " ".join(words[int(m.group(0))] for m in rx.finditer(s))
      


      至于你的最后一个问题 - 用英文单词插入括号 - 你需要弥补一个替换功能:
      def to_eng(s):
          words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
          rx = re.compile(r'\d+')
      
          def repl(digits):
              return digits.group(0) + " (" + " ".join(words[int(x)] for x in digits.group(0)) + ")"
      
          return rx.sub(repl, s)
      

      这会产生您的示例字符串:

      I want to buy 17 (one seven) cars.
      

      【讨论】:

      • @whiteyflowr:查看底部的更新答案(如果对您有帮助,请接受答案)。
      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多