我有一些像下面這樣的短語:
This is not my spending '$10', this is companys spending: '$250 million' and this is some other figure: '$200,000'.
我想洗掉美元符號并在短語末尾添加“美元”,如下所示:
This is not my spending '10 dollars', this is companys spending: '250 million dollars' and this is some other figure: '200000 dollars'.
我現在有匹配([£\$€][\s\d,\d] (|million|billion|trillion))的正則運算式,但我無法正確地獲得替換部分。
我該怎么做呢?
uj5u.com熱心網友回復:
您可以使用以下函式來實作您所描述的。
import re
def adjust_dollars(text):
text = re.sub(r'^\$', '', text)
text = re.sub(r'(.$)', r'\1 dollars', text)
return text
測驗運行:
words = ['$10', '$250 million', '$200,000']
result = map(adjust_dollars, words)
print(list(result))
輸出:
['10 dollars', '250 million dollars', '200,000 dollars']
uj5u.com熱心網友回復:
只是一個 re.sub 的例子:
t1 = "$10"
t2 = "$250 million"
t3 = "$200,000"
sub_pattern = "/$|," #Look for dollar signs or commas
tail = " dollars"
re.sub(sub_pattern,"",t1) tail -> 10 dollars
re.sub(sub_pattern,"",t2) tail -> 250 million dollars
re.sub(sub_pattern,"",t3) tail -> 200000 dollars
uj5u.com熱心網友回復:
由于您的正則運算式還包含英鎊和歐元的符號,因此我認為并非所有這些符號都以$. 然后您可以使用re.sub回呼函式來確定要使用的貨幣。如果貨幣出現在文本中間,這也適用。
import re
p = "([£\$€])\s?([,\d] (?: million| billion| trillion|))"
d = {"$": "dollars", "£": "pounds", "€": "euros"}
text = "I have $10 and £3 million and €100,000 trillion"
print(re.sub(p, lambda m: f"{m.group(2)} {d[m.group(1)]}", text))
# I have 10 dollars and 3 million pounds and 100,000 trillion euros
還要注意正則運算式的一些細微變化:我將貨幣符號放在一個組中,以便以后可以訪問它,并將“空”后綴放在最后,否則它首先被貪婪地匹配,其他都不匹配。另外,不需要在 中放入\d兩次[...],最好將空格移動到后綴部分。
uj5u.com熱心網友回復:
如果所有字串都以“$”開頭,則不需要使用正則運算式。只需使用“[1:]”在第二個字符處選擇它們并在末尾添加“美元”。例如,如果您的字串存盤在名為 a 的變數中:
a[1:] " dollars"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/361860.html
上一篇:如何使用正則運算式提取部分字串
下一篇:正則運算式匹配模式之后的任何內容
