Python中使用多个分隔符分隔字符串re.split

正则表达式基础,看这篇就够了

摘要

split多个分隔符 单一分隔符,使用str.split()即可
多个分隔符,复杂的分隔情况,使用re.split


单一分隔符,str.split()与 re.split()效果是一样的
多个单一 分隔符 时 ,”[]”与 “|”的 效果是一样的,但是 请注意 使用 “|”时某些字符 需要转义
多个 长短 不一 的的分隔符的分隔符时, 就应该使用 “|”
适用 “()”则是 将分隔后的结果保留分隔符(在split中,分隔符理应是被刨除的,所以这里有点难理解)
详见基础篇


一些 更 复杂 的 就 需要 加深对正则表达式的了解了 ,比如(非)贪婪模式,前/后向匹配
详见进阶篇

基础篇

import re

line = "word;Word;temp"
"""
单一分隔符,str.split()与 re.split()zuoy作用一致 
"""
print line.split("; ")
# ['word', 'Word', 'temp']
print re.split(r"; ", line)
# ['word', 'Word', 'temp']


"""
多个单一 分隔符 时 ,"[]"与 "|"的 效果是一样的,但是 请注意 使用 “|”时 mouxie某些字符 需要转义  
"""
line1 = "word;Word,emp?hahaha"
print re.split(r";|,|\?", line1) #别忘了转义"?"
# ['word', 'Word', 'emp', 'hahaha']
print re.split(r"[;,?]", line1)
# ['word', 'Word', 'emp', 'hahaha']

## 当 空格 出现 时 ,就 十分讨厌了(ノω<。)ノ))☆.。 
"""
多个 长短 不一 的的分隔符的分隔符时, 就应该使用 "|"
"""
line2 = "word;Word,emp? hahaha; whole, cai"
print re.split(r";|,|\?\s|;\s|,\s", line2) 
# ['word', 'Word', 'emp', 'hahaha', ' whole', ' cai']

## 以上 只是 为了 说明这些的吗的适用情况 ,还有 更加渐变简便 的 用法 是
print re.split(r"\W+", line)
print re.split(r"\W+", line1)
print re.split(r"\W+", line2)

"""
适用 “()”则是 将 分隔 后的 结果 连同分隔符均 有所 保留 
"""
print re.split(r"(\W+)", line2)
# ['word', ';', 'Word', ',', 'emp', '? ', 'hahaha', '; ', 'whole', ', ', 'cai'] 
# 注意: 连 空格 都 保留了 

进阶篇

"""
在 正则中 具有 含义 的 符号 也将 作为 分隔符 的 通用 解决 办法 ,请不要 在 尝试 要有 多少个 ‘\’
"""

delimiters = "a", "...", "(C)"
regexPattern = '|'.join(map(re.escape, delimiters)) # 'a|\\.\\.\\.|\\(C\\)'
line = "stackoverflow (C) is awesome... isn't it?"
print re.split(regexPattern,line) # ['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]



"""
一些 更 复杂 的 就 需要 你对 正则 表达式 的更 深入 的 了解了 
以下是 stackoverflow的 关于 re.split的 问题 
"""
##split a string like "HELLO there HOW are YOU" by uppercase, thus the result is ['HELLO there', 'HOW are', 'YOU']
line1 = "HELLO there HOW are YOU"
re.split(r"\s+(?=[A-Z]+)", line1) # 后向匹配 

# i want to split “400-IF(3>5,5,5)+34+IF(4>5,5,6)” by string 'IF(3>5,5,5)', so re.split() should give list with length: 2  ['400-', '+34+']
line2 = “400-IF(3>5,5,5)+34+IF(4>5,5,6)”
' '.join(re.split(r'IF\(.*?\)',z)).split()  # 贪婪模式 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值