在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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
浅析Python中的for 循环
Jun 09 Python
Flask之请求钩子的实现
Dec 23 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python实现的发邮件功能示例
Sep 11 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python如何telnet到网络设备
Feb 18 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
在Python 中将类对象序列化为JSON
Apr 06 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开发中的错误收集,不定期更新。
2011/02/03 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
用python写测试数据文件过程解析
2019/09/25 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
大学生的四年学习自我评价
2013/12/13 职场文书
表决心的诗句大全
2014/03/11 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
社区安全温馨提示语
2015/07/14 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Python自动化测试PO模型封装过程详解
2021/06/22 Python