問題:
我有一個字串串列,我需要去掉看起來像'digit / digit'. 一直堅持這個問題,仍然不明白如何解決它我將不勝感激。
樣本輸入:
steps = [
'mix butter , flour , 1 / 3 c',
'sugar and 1-1 / 4 t',
'vanilla'
]
預期輸出:
[
'mixbutter,flour,1 / 3c',
'sugarand1-1 / 4t',
'vanilla'
]
我的做法:
steps_new = []
for step in steps:
step = re.sub(r'\s [^\d \s/\s\d ]','',step)
steps_new.append(step)
steps_new
我的輸出:
[
'mixutterlour 1 / 3',
'sugarnd 1-1 / 4',
'vanilla'
]
uj5u.com熱心網友回復:
您可以使用
import re
steps = ['mix butter , flour , 1 / 3 c', 'sugar and 1-1 / 4 t', 'vanilla']
steps_new = [re.sub(r'(\d \s*/\s*\d )|\s ', lambda x: x.group(1) or "", x) for x in steps]
print(steps_new) # => ['mixbutter,flour,1 / 3c', 'sugarand1-1 / 4t', 'vanilla']
在線查看Python 演示。
正(\d \s*/\s*\d )|\s 則運算式匹配并捕獲到第 1 組數字序列 零個或多個空格 / 零個或多個空格 數字(帶(\d \s*/\s*\d )),或 ( |) 僅匹配一個或多個空格 ( \s )。
如果第 1 組參加了比賽,則替換為空字串。否則,替換為第 1 組值,即不發生替換。
uj5u.com熱心網友回復:
您可以洗掉所有空格,然后將空格插入正確的位置(\d)/(\d):
import re
steps = ["mix butter , flour , 1 / 3 c", "sugar and 1-1 / 4 t", "vanilla"]
for step in steps:
x = re.sub(r"(\d)/(\d)", r"\1 / \2", step.replace(" ", ""))
print(x)
印刷:
mixbutter,flour,1 / 3c
sugarand1-1 / 4t
vanilla
uj5u.com熱心網友回復:
您可以使用這個基于環視的解決方案在一個正則運算式中得到它:
(?<!/)[ \t](?![ \t]*/)
正則運算式演示
正則運算式詳細資訊:
(?<!/): 斷言前一個字符不是/[ \t]: 匹配空格或制表符(?![ \t]*/): 斷言下一個位置沒有/后 0 個或更多空格
代碼:
import re
arr = ["mix butter , flour , 1 / 3 c", "sugar and 1-1 / 4 t", "vanilla"]
rx = re.compile(r'(?<!/)[ \t](?![ \t]*/)')
for i in arr:
print (rx.sub('', i))
代碼演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518513.html
標籤:Python正则表达式
