今天搞了一上午,终于写出了正则表达式版本的代码行号删除工具,正则表达式真是太强大了,非常有用,看来还要继续深入学习啊。
下边是PyQt4的代码,核心函数是MyRegex,可以很容易地改成wxPython界面,参见我的上一篇文章《我的第一个Python程序——去除代码前行号的Python小工具》。当然如果你愿意,也很容易用其他支持正则表达式的语言改写这个程序。
# -*- coding: utf-8 -*-
"""
去除代码前行号的Python小工具-正则表达式版
Develop by YanXY
"""
import sys
import re
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.resize(800, 600)
window.setWindowTitle(u'去除代码前行号的Python小工具 - 正则表达式版 - Develop by YanXY')
textBox = QtGui.QTextEdit()
textBox.setAcceptRichText(bool(0))
butOK = QtGui.QPushButton(u"去除行号")
layout = QtGui.QHBoxLayout()
layout.addWidget(textBox)
layout.addWidget(butOK,alignment = QtCore.Qt.AlignTop)
window.setLayout(layout)
def CutLineNum():
textBox.setText(MyRegex(unicode(textBox.toPlainText()).splitlines(1)))
def MyRegex(multiLine = []):
outStr = u''
p = re.compile(r'\D*\d+\s?[.|:|\]|\)]?\s?')
""" 以上正则表达式的含义是:0或多个非数字字符 + 至少1个数字字符 + 0或1个空白字符 +
0或1个分隔符(目前包括点、冒号、右圆/方括号,其他分隔符请自己添加) +
0或1个空白字符(这个可以不要,有时候影响代码缩进) """
for singleLine in multiLine:
outStr += p.sub( '', singleLine,count = 1 )
return outStr
QtCore.QObject.connect(butOK,QtCore.SIGNAL("clicked()"),CutLineNum)
window.show()
sys.exit(app.exec_())
附:《从C#到Python》系列连载目录
从C#到Python —— 谈谈我学习Python一周来的体会
从C#到Python —— 0 前言:进入Python的世界
从C#到Python —— 1 变量和数据类型
从C#到Python —— 2 运算符、表达式和流程控制
从C#到Python —— 3 函数及函数编程
从C#到Python —— 4 类及面向对象
从C#到Python —— 5 模块和包
New! 从C#到Python —— PDF整理版(下载地址)