簡體   English   中英

提取分數的正則表達式

[英]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/31/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 演示 注意halfhour之間的空格丟失了,因為它在輸入中丟失了。 您需要添加更多邏輯以僅在預期情況下添加空間。

細節

  • (?<?\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.

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