在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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
python中将字典转换成其json字符串
Jul 16 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
python hashlib加密实现代码
Oct 17 Python
详解python中*号的用法
Oct 21 Python
在notepad++中实现直接运行python代码
Dec 18 Python
3种python调用其他脚本的方法
Jan 06 Python
python使用布隆过滤器的实现示例
Aug 20 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python中str内置函数用法总结
Dec 27 Python
python中super()函数的理解与基本使用
Aug 30 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 身份验证方面的函数
2009/10/11 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
超级强大的表单验证
2006/06/26 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python functools模块学习总结
2015/05/09 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
python函数的5种参数详解
2017/02/24 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python线程里哪种模块比较适合
2020/08/02 Python
巴基斯坦购物网站:Goto
2019/03/11 全球购物
跟单文员岗位职责
2014/01/03 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
会计专业求职信范文
2014/03/16 职场文书
春节晚会开场白
2015/05/29 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS