簡體   English   中英

在Python中使用Regex查找數字並將數字附加到字符串

[英]Find Digit and Append Number Word to String Using Regex in Python

我試圖找到輸入字符串的任何數字,然后在字符串的末尾附加每個數字的英文單詞。 但是,我的代碼拋出了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 I want to buy 17 cars. one seven

提示:這里缺少一些東西(也許是函數調用?)

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. 

我將按照以下方式進行操作:

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循環相比,此方法允許使用更簡潔的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM