在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 获取 Linux 系统信息的代码
Jul 13 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
python算法表示概念扫盲教程
Apr 13 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
django 扩展user用户字段inlines方式
Mar 30 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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 sprintf()函数用例解析
2011/05/18 PHP
ThinkPHP分页实例
2014/10/15 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
JSONP之我见
2015/03/24 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
上班玩手机检讨书
2014/02/17 职场文书
环境保护建议书
2014/08/26 职场文书
导游词欢迎词
2015/02/02 职场文书
单位实习介绍信
2015/05/05 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js