在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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
Python脚本实时处理log文件的方法
Nov 21 Python
python实现八大排序算法(2)
Sep 14 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
详解python pandas 分组统计的方法
Jul 30 Python
python判断自身是否正在运行的方法
Aug 08 Python
Python命令行click参数用法解析
Dec 19 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
python 从list中随机取值的方法
Nov 16 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
基于mysql的论坛(4)
2006/10/09 PHP
php 表单验证实现代码
2009/03/10 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
基于jquery的表格排序
2010/09/11 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
仓管岗位职责范本
2014/02/08 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
应用数学专业求职信
2014/03/14 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
Python实现双向链表
2022/05/25 Python
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技