>>> re.split('(\W)', 'foo/bar spam\neggs') ['foo', '/', 'bar', ' ', 'spam', '\n', 'eggs']

如果你正在拆分换行符,使用splitlines(True) 。

>>> 'line 1\nline 2\nline without newline'.splitlines(True) ['line 1\n', 'line 2\n', 'line without newline']

(不是一个通用的解决scheme,但在这里添加这个,以防有人来这里没有实现这个方法。)

另一个没有正则expression式的解决scheme,在Python 3上运行良好

# Split strings and keep separator test_strings = ['', 'Hi', '', ''+unicode_max_char+'' print(split_and_keep(ridiculous_string, '

# This keeps all separators in result ########################################################################## import re st="%%(c+dd+e+f-1523)%%7" sh=re.compile('[\+\-//\*\\%\(\)]') def splitStringFull(sh, st): ls=sh.split(st) lo=[] start=0 for l in ls: if not l : continue k=st.find(l) llen=len(l) if k> start: tmp= st[start:k] lo.append(tmp) lo.append(l) start = k + llen else: lo.append(l) start =llen return lo ############################# li= splitStringFull(sh , st) ['%%(', 'c', '+', 'dd', '+', 'e', '+', 'f', '-', '1523', ')%%', '7']

你也可以用一个string数组而不是一个正则expression式来分割一个string,如下所示:

def tokenizeString(aString, separators): #separators is an array of strings that are being used to split the the string. #sort separators in order of descending length separators.sort(key=len) listToReturn = [] i = 0 while i < len(aString): theSeparator = "" for current in separators: if current == aString[i:i+len(current)]: theSeparator = current if theSeparator != "": listToReturn += [theSeparator] i = i + len(theSeparator) else: if listToReturn == []: listToReturn = [""] if(listToReturn[-1] in separators): listToReturn += [""] listToReturn[-1] += aString[i] i += 1 return listToReturn print(tokenizeString(aString = "\"\"\"hi\"\"\" hello + world += (1*2+3/5) '''hi'''", separators = ["'''", '+=', '+', "/", "*", "\\'", '\\"', "-=", "-", " ", '"""', "(", ")"]))

如果你想分割string,而保持分隔符正则expression式不捕获组:

def finditer_with_separators(regex, s): matches = [] prev_end = 0 for match in regex.finditer(s): match_start = match.start() if (prev_end != 0 or match_start > 0) and match_start != prev_end: matches.append(s[prev_end:match.start()]) matches.append(match.group()) prev_end = match.end() if prev_end < len(s): matches.append(s[prev_end:]) return matches regex = re.compile(r"[\(\)]") matches = finditer_with_separators(regex, s)

如果假定正则expression式被包含进捕获组中:

def split_with_separators(regex, s): matches = list(filter(None, regex.split(s))) return matches regex = re.compile(r"([\(\)])") matches = split_with_separators(regex, s)

这两种方式也将删除在大多数情况下无用和烦人的空组。

如果你只有一个分隔符,你可以使用列表parsing:

text = 'foo,bar,baz,qux' sep = ','

附加/预先分隔符:

result = [x+sep for x in text.split(sep)] #['foo,', 'bar,', 'baz,', 'qux,'] # to get rid of trailing result[-1] = result[-1].strip(sep) #['foo,', 'bar,', 'baz,', 'qux'] result = [sep+x for x in text.split(sep)] #[',foo', ',bar', ',baz', ',qux'] # to get rid of trailing result[0] = result[0].strip(sep) #['foo', ',bar', ',baz', ',qux']

分隔符是它自己的元素:

result = [u for x in text.split(sep) for u in (x, sep)] #['foo', ',', 'bar', ',', 'baz', ',', 'qux', ','] results = result[:-1] # to get rid of trailing

python分割字符串保留分隔符_在Python中,如何分割一个string并保留分隔符?相关推荐

  1. python拆分字符串生成列表_关于python:如何将字符串拆分为列表?

    我希望我的python函数分割一个句子(输入)并将每个单词存储在一个列表中.我当前的代码将句子拆分,但不将单词存储为列表.我该怎么做? 1 2 3 4 5 6 7 8 9 10def split_li ...

  2. python输入字符串转换为公式_将python字符串转化成长表达式的函数eval实例

    爬一个网页时,要保存的数据都没有encode,就导致保存下来的中文都变成unicode了... 那么,怎么把一个表示字符串的unicode还原成unicode呢? 函数eval(expression) ...

  3. python分割字符串为字母_关于python:以大写字母分割字符串

    在出现给定字符集之前拆分字符串的pythonic方法是什么? 例如,我想拆分 'TheLongAndWindingRoad' 在出现大写字母(可能是首字母除外)时,获得 ['The', 'Long', ...

  4. python查找字符串所在行_使用Python CSV和glob查找匹配的字符串和打印行

    我有数百个csv文件,我正在尝试编写一个python脚本,它将解析所有这些文件并打印出具有匹配字符串的行.如果我们能用一个字符串(而不是一个字符串列表)来实现这一点,我会很高兴的.使用python 2 ...

  5. python 截取字符串6位_在Python中从字符串获取x个最低有效位

    How can I get the x LSBs from a string (str) in Python? In the specific I have a 256 bits string con ...

  6. python中文字符串多余空格_[785]python去掉字符串中多余的空格

    # -*- coding:utf-8 -*- import re # 检验某个字符是否是中文字符 def is_chinese(char): if '\u4e00' <= char <= ...

  7. python 匹配字符串多个_在Python中匹配多个数据集的字符串

    这里有一小段你可以启发的代码.主要思想是使用递归函数. 为简单起见,我承认我已经在列表中加载了数据,但是你可以在之前从文件中获取它们: data_files = [ 'data_a.dat', 'da ...

  8. java 字符串拆分技巧_在java中如何拆分一个字符串?

    "004-034556"为例用String#split()方法即可: String string = "004-034556"; String[] parts ...

  9. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

  10. python树莓派编程 沃尔弗拉姆_《 Python树莓派编程》——3.3 Python入门-阿里云开发者社区...

    本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfram Donat)著韩德强 等译,更多章节内容可以访问云栖社区&quo ...

最新文章

  1. 常见的函数式编程模型
  2. 解读Windows更新下载器文件列表(推荐)
  3. linux存储--进程栈 线程栈 内核栈 中断栈(十六)
  4. 今天上网感觉有点儿卡,上了路由器一看,数据包狂跳
  5. ios cannot use “@throw“ with objective-c exceptions disabled 问题解决方案
  6. 在WPF中开启摄像头扫描二维码(Media+Zxing)
  7. 关于高德地图转换经纬度为屏幕点,方便自定义需链接网络的marker且添加属性动画
  8. 计算机初始化,win7怎么初始化电脑_手把手教你初始化win7电脑
  9. 模块化笔记软件 Anytype 综合评测
  10. 有一个小于500的三位数abc,对于这三个数,甲乙丙丁有如下说法:.......................请问2a+b-c等于多少?
  11. 了解java集合框架
  12. oracle SO币种默认设置,Oracle EBS 11i 表结构——OE模块 so_headers_all;so_lines_all
  13. 外包公司的三大弊端是什么,在此情况下还建议去外包公司吗
  14. 求解线性同余方程--扩展欧几里得
  15. java文件转二进制
  16. android 系统光标,如何定位android系统中光标的位置
  17. anchor机制讲解
  18. Android Launcher启动过程
  19. 使用Python编写一个倒计时程序
  20. Python源码学习(一)

热门文章

  1. 【HB filter】基于FPGA的半带滤波器(HB) 的设计
  2. iOS自动化测试KIF使用 jenkins相关配置
  3. Wireshark过滤器语法
  4. 汇编语言输出99乘法表
  5. Nginx proxy_set_header 理解
  6. 厉害了,人人都可以制作自己的红包封面!(附:详细制作教程)
  7. node的Mysql模块
  8. [小程序] 获取用户头像以及昵称
  9. 与你浅谈百度知道问答推广工作的注意事项及技巧
  10. 使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图