在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中Random和Math模块学习笔记
May 18 Python
Saltstack快速入门简单汇总
Mar 01 Python
利用Python抓取行政区划码的方法
Nov 28 Python
Python代码实现KNN算法
Dec 20 Python
python实现学生管理系统
Jan 11 Python
PyQt实现界面翻转切换效果
Apr 20 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
对python 中class与变量的使用方法详解
Jun 26 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
利用python实现逐步回归
Feb 24 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php 无限极分类
2008/03/27 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP7内核之Reference详解
2019/03/14 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python实现多线程采集的2个代码例子
2014/07/07 Python
详解Python字典小结
2018/10/20 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
可口可乐广告词
2014/03/20 职场文书
导游个人求职信范文
2014/03/23 职场文书
篮球社团活动总结
2014/06/27 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫