问题:
我有一个字符串列表,我需要删除看起来像 'digit/digital'
的子字符串之前和之后的空格。被困在这个问题上有一段时间了,仍然不明白如何解决它,我将不胜感激任何帮助。
示例输入:
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'
]
最佳答案
你可以使用
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 demo online .
(\d+\s*/\s*\d+)|\s+
regex匹配并捕获到第 1 组数字序列 + 零个或多个空格 +/+ 零个或多个空格 + 数字(使用 (\d+\s*/\s*\d+)
),或 (|
) 仅匹配一个或多个空格 (\s+
)。
如果第 1 组参加了比赛,则替换为空字符串。否则,替换为组 1 值,即不发生替换。
关于python - 如何使用正则表达式在Python中删除模式之前和之后的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74131150/