如何正确分割包含分数格式的字符串?
解决方法:精准分割指定斜杠而非所有斜杠
哈哈,这个坑我踩过!你用普通的split('/')会把字符串里所有斜杠都当成分割符,自然会把分数里的1/2拆成两半,这完全不是我们想要的效果对吧?
问题根源
你的目标是分割用来分隔卧室和浴室信息的斜杠,而不是字符串里所有斜杠。这个特殊斜杠的特征是被空格包围(比如/),而分数里的斜杠前后是数字,没有这种空格包围的格式。
具体解决方案
下面提供几种不同场景下的实现方式,你可以根据实际情况选择:
方案一:精准匹配标准分隔符 /
适合你给出的两个示例场景,分隔符是固定的「空格+斜杠+空格」格式:
import re # 示例1测试 input_str1 = "1 Bedroom / 1 1/2 Bath" result1 = re.split(r' / ', input_str1) print(result1) # 输出: ['1 Bedroom', '1 1/2 Bath'] # 示例2测试 input_str2 = "1 Bedroom / 1/2 Bath" result2 = re.split(r' / ', input_str2) print(result2) # 输出: ['1 Bedroom', '1/2 Bath']
方案二:处理空格不固定的情况
如果分隔符前后的空格数量不确定(比如多个空格、单侧空格),可以用正则匹配任意数量的空格包围的斜杠:
import re # 分隔符前后有多个空格的情况 input_str = "1 Bedroom / 1 1/2 Bath" result = re.split(r'\s+/\s+', input_str) print(result) # 输出: ['1 Bedroom', '1 1/2 Bath']
方案三:最通用的匹配(适配无空格分隔符)
如果分隔符可能没有空格,但分数里的斜杠一定在数字之间,可以用正则断言匹配「非数字前后的斜杠」:
import re # 分隔符无空格的情况 input_str = "1 Bedroom/1 1/2 Bath" # 匹配前面不是数字 或 后面不是数字的斜杠 result = re.split(r'(?<!\d)/|/(?!\d)', input_str) # 清理分割后可能残留的空格 result = [part.strip() for part in result] print(result) # 输出: ['1 Bedroom', '1 1/2 Bath']
内容的提问来源于stack exchange,提问作者prajeesh
相关产品推荐
相关产品推荐

