[英]Regular expression to extract fractions
我正在尋找一個正則表達式來匹配給定字符串中格式[0-9]\/[1-9]{1,2}
的分數。
下面是一個例子:
my_str = "This is a 1/2 1/4. Press 1/2/3. He drove a car for 1/2hour." # A free text
def replace_fractions(text):
fraction_dict = {
'1/2': 'half',
'1/4': 'quarter',
'3/4': 'three quarters',
'2/3': 'two thirds',
}
_tmp = ' '.join([fraction_dict.get(w, w).strip() for w in text.split()])
return _tmp
current_result = replace_fractions("This is a 1/2 1/4. Press 1/2/3. He drove a car for 1/2hour.")
當前結果:
"This is a half 1/4. Press 1/2/3. He drove a car for 1/2hour."
預期結果:
"This is a half quarter. Press 1/2/3. He drove a car for half hour."
很明顯,需要使用正則表達式來處理像1/2/3
或1/4.
或1/2hour
。
但是,這個[0-9]\/[1-9]{1,2}
匹配所有內容。 處理這些情況的正確正則表達式是什么。
注意:正則表達式只需要處理上述情況。 所有極端情況均可忽略(或專家點評后重新編輯)
您可以在您的方法中使用以下return
值:
return re.sub(r'(?<!\d)(?<!\d/)[0-9]/[0-9]{1,2}(?!/?\d)', lambda x: fraction_dict.get(x.group(), x.group()), text)
請參閱Python 演示。 注意half
和hour
之間的空格丟失了,因為它在輸入中丟失了。 您需要添加更多邏輯以僅在預期情況下添加空間。
細節
(?<?\d)(?<!\d/)
- 一個數字或一個數字和/
不允許緊跟在左邊[0-9]/[0-9]{1,2}
- 一個數字, /
和 1 或 2 位數字(??/?\d)
- 緊靠右邊,不應該有/
+ 數字或只有一個數字。import re
my_str = "This is a 1/2 1/4. Press 1/2/3. He drove a car for 1/2hour." # A free text
def replace_fractions(text):
fraction_dict = {
'1/2': 'half',
'1/4': 'quarter',
'3/4': 'three quarters',
'2/3': 'two thirds',
}
return re.sub(r'(?<!\d)(?<!\d/)[0-9]/[0-9]{1,2}(?!/?\d)', lambda x: fraction_dict.get(x.group(), x.group()), text)
current_result = replace_fractions("This is a 1/2 1/4. Press 1/2/3. He drove a car for 1/2hour.")
print(current_result)
# => This is a half quarter. Press 1/2/3. He drove a car for halfhour.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.