在python中使用正则表达式查找可嵌套字符串组


Posted in Python onOctober 24, 2017

在网上看到一个小需求,需要用正则表达式来处理。原需求如下:

找出文本中包含”因为……所以”的句子,并以两个词为中心对齐输出前后3个字,中间全输出,如果“因为”和“所以”中间还存在“因为”“所以”,也要找出来,另算一行,输出格式为:

行号 前面3个字 *因为* 全部 &所以& 后面3个字(标点符号算一个字)

2 还不是 *因为* 这里好, &所以& 没有人

实现方法如下:

#encoding:utf-8
import os
import re
def getPairStriList(filename):
  pairStrList = []
  textFile = open(filename, 'r')
  pattern = re.compile(u'.{3}\u56e0\u4e3a.*\u6240\u4ee5.{3}') #u'\u56e0\u4e3a和u'\u6240\u4ee5'分别为“因为”和“所以”的utf8码
  for line in textFile:
    utfLine = line.decode('utf8')
    result = pattern.search(utfLine)
    while result:
      resultStr = result.group()
      pairStrList.append(resultStr)
      result = pattern.search(resultStr,2,len(resultStr)-2)
  #对每个字符串进行格式转换和拼接  
  for i in range(len(pairStrList)):
    pairStrList[i] = pairStrList[i][:3] + pairStrList[i][3:5].replace(u'\u56e0\u4e3a',u' *\u56e0\u4e3a* ',1) + pairStrList[i][5:]
    pairStrList[i] = pairStrList[i][:len(pairStrList[i])-5] + pairStrList[i][len(pairStrList[i])-5:].replace(u'\u6240\u4ee5',u' &\u6240\u4ee5& ',1)
    pairStrList[i] = str(i+1) + ' ' + pairStrList[i]
  return pairStrList
  if __name__ == '__main__':
  pairStrList = getPairStriList('test.txt')
  for str in pairStrList:
    print str

PS:下面看下python里使用正则表达式的组嵌套

由于组本身是一个完整的正则表达式,所以可以将组嵌套在其他组中,以构建更复杂的表达式。下面的例子,就是进行组嵌套的例子:

#python 3.6 
#蔡军生  
#http://blog.csdn.net/caimouse/article/details/51749579 
# 
import re 
def test_patterns(text, patterns): 
  """Given source text and a list of patterns, look for 
  matches for each pattern within the text and print 
  them to stdout. 
  """ 
  # Look for each pattern in the text and print the results 
  for pattern, desc in patterns: 
    print('{!r} ({})\n'.format(pattern, desc)) 
    print(' {!r}'.format(text)) 
    for match in re.finditer(pattern, text): 
      s = match.start() 
      e = match.end() 
      prefix = ' ' * (s) 
      print( 
        ' {}{!r}{} '.format(prefix, 
                   text[s:e], 
                   ' ' * (len(text) - e)), 
        end=' ', 
      ) 
      print(match.groups()) 
      if match.groupdict(): 
        print('{}{}'.format( 
          ' ' * (len(text) - s), 
          match.groupdict()), 
        ) 
    print() 
  return

例子:

#python 3.6 
#蔡军生  
#http://blog.csdn.net/caimouse/article/details/51749579 
# 
from re_test_patterns_groups import test_patterns 
test_patterns( 
  'abbaabbba', 
  [(r'a((a*)(b*))', 'a followed by 0-n a and 0-n b')], 
)

结果输出如下:

'a((a*)(b*))' (a followed by 0-n a and 0-n b)
 'abbaabbba'
 'abb'    ('bb', '', 'bb')
   'aabbb'  ('abbb', 'a', 'bbb')
     'a' ('', '', '')

总结

以上所述是小编给大家介绍的在python中使用正则表达式查找可嵌套字符串组,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python采集博客中上传的QQ截图文件
Jul 18 Python
python使用nntp读取新闻组内容的方法
May 08 Python
Python中的index()方法使用教程
May 18 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
详解Python牛顿插值法
May 11 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 #Python
浅谈python中copy和deepcopy中的区别
Oct 23 #Python
python的构建工具setup.py的方法使用示例
Oct 23 #Python
python使用pyqt写带界面工具的示例代码
Oct 23 #Python
基于Django的python验证码(实例讲解)
Oct 23 #Python
itchat接口使用示例
Oct 23 #Python
python实现微信接口(itchat)详细介绍
Oct 23 #Python
You might like
PHP 加密解密内部算法
2010/04/22 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue中多个倒计时实现代码实例
2019/03/27 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python基于递归解决背包问题详解
2019/07/03 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
"火柴棍式"程序员面试题
2014/03/16 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
犯错检讨书
2014/02/21 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js