在python中使用正则表达式查找可嵌套字符串组
作者:mrr 发布时间:2021-10-07 07:02:06
标签:python,正则表达式,字符串
在网上看到一个小需求,需要用正则表达式来处理。原需求如下:
找出文本中包含”因为……所以”的句子,并以两个词为中心对齐输出前后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中使用正则表达式查找可嵌套字符串组网站的支持!
0
投稿
猜你喜欢
- mmh3安装方法哈希方法主要有MD、SHA、Murmur、CityHash、MAC等几种方法。mmh3全程murmurhash3,是一种非加
- Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from
- 前言上篇文章主要写了利用scapy实现ping扫描,这篇文章主要是利用scapy模块实现内网ARP扫描实现过程上篇文章中介绍了通过scapy
- 1.原始数据是这样的2.脚本如下:import pandas as pddf = pd.read_excel(r'E:\untitl
- 以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3],如下:>>>
- 上期回顾:亚马逊购物用户体验分析 (二)方便的导航元素任何网上商店的成功,至关重要的一点,就是用户可以简单轻松地使用导航条。基本店铺分类,用
- 最近了解了下repaint和reflow的相关知识,觉得在页面重构过程中就应该考虑前端开发(js)人员对dom进行操作,能够减轻客户浏览器的
- 1、处理包含数据的文件最近利用Python读取txt文件时遇到了一个小问题,就是在计算两个np.narray()类型的数组时,出现了以下错误
- 系列目录:1. 服务器XMLHTTP(Server XMLHTTP in ASP)基础2. 
- 今天在 ajaxian 上看到一篇文章,名为 Five Ajax Anti-pattern ,觉得讲得比较有道理,现粗略翻译一下,加一些自己
- ASP 能快速执行你的 * 页,但你还可以通过紧缩代码和数据库连接以使它们执行更快。这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度
- Python 实现删除某路径下文件及文件夹的脚本#!/usr/bin/env pythonimport osimport shutildel
- 安装好mysql后,在终端输入 mysql -u root -p 按回车,输入密码后提示access denied......ues pas
- 本文实例汇总了python求列表交集的方法。分享给大家供大家参考。具体方法如下:交集对于给定的两个集合A 和 集合B 的交集是指含有所有既属
- 首先为什么会有axis这个概念?因为在numpy模块中,大多数处理的是矩阵或者多维数组,同时,对多维数组或者矩阵的操作有多种可能,为了帮助实
- 一般采用的方法:self.window = Qdialog() # 实例化self.window.show() # 显示界面用这种方法只能打
- 五子棋游戏相信大部分人都玩过,今天我们用python来实现一次具体代码可以访问我的GitHub地址获取构建五子棋棋盘from collect
- 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下:import re s = "how19
- 在Flash中使用ASP需要的条件:1。你的ISP的server必须支持Active Server Pages并且最好支持数据库2。你应该要
- 01 实现我们几乎每个人都用过计算器,大家对于计算器应该都是比较熟悉的,计算器整体也是比较简单的,主要包括:显示器、键盘、运算的逻辑处理等,