記事のディレクトリ
序文
このプロジェクト、彼らが学んだことを正規表現パターンマッチングと実践のためにある演習、参考書「クイック・スタートのプログラミングパイソン - 退屈な自動化しましょう」は、元のプロジェクトに変更をパーソナライズされました。
-
まず、問題の背景
長い記事や内のすべてのページを見つけるために退屈なタスクを検討電話番号、携帯電話番号とメールアドレスを。
私たちは、私たちは迅速番号や電子メールアドレスの長いクリップボード内の文書、そしてきれいに印刷されたすべてを見つけるのを助けるためにプログラムを設計する必要があります。
一般的なプロセスはこれです:
私たちは、すべてのテキストを選択するには、Ctrl + Aキーを押すし、Ctrl + Cでクリップボードにコピーし、プログラムを実行するために、最後の電話番号、電話番号、電子メールアドレスは表示窓にきちんとされますプリントアウト。
-
第二に、機能解析
最初のステップ:正規表現を構築します
- 3つの正規表現の電話番号、携帯電話番号やメールアドレスの構築
- 我々は可能な限り完全なように、形成する3つの要素から構成される知っておく必要がありますし、番号と電子メールのすべての形態をカバー
ステップ2:通常のマッチングを行います
- 使用して、テキストの内容を取得pyperclip
- すべての一致を検索するための3つの正規表現のマッチング、使用のfindAll()
- コンテンツのフォーマットは、連結に一致するように、その後順番に印刷動作バックを容易にリストに追加されました
ステップ3:印刷結果
- きちんと3つのコンテンツの電話番号、携帯電話番号とメールアドレスを印刷
- 一致が見つからない場合、メッセージが表示されているが見つかりません
フレームワークは、以下のように:
import re
import pyperclip
# 第一步:构建正则表达式
# 【01】创建电话号码的正则表达式
# 【02】创建手机号码的正则表达式
# 【03】创建邮箱的正则表达式
# 第二步:进行正则匹配
# 第三步:打印结果
-
第三に、コードの実装
そして、直接コード内のコードの特定のコメントに記載されました
import re
import pyperclip
# 第一步:构建正则表达式
# 创建电话号码的正则表达式
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\)) # 3位数字或者带括号的3位数字
(\s|-)? # 分隔符:空格或者-(匹配0次或1次)
(\d{3}) # 3位数字
(\s|-) # 分隔符:空格或者-
(\d{4}) # 4位数字
)''',re.VERBOSE) # re.VERBOSE 管理复杂表达式
# 创建手机号码的正则表达式
cellphoneRegex = re.compile(r'''(
^(\d{3}) # 3位数字开始
(-)? # 分隔符:-(匹配0次或1次) 因为有可能没有分隔符
(\d{4}) # 4位数字
(-)? # 分隔符:-(匹配0次或1次) 因为有可能没有分隔符
(\d{4})$ # 4位数字结束
)''',re.VERBOSE) # re.VERBOSE 管理复杂表达式
# 创建邮箱的正则表达式 [email protected]
emailRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ # 收件人账号(可以使用的符号)
@ # 匹配连接符@
[a-zA-Z0-9.-]+ # 服务器名
\. # 点 dot
([a-zA-Z]{2,4}) # 域名
)''',re.VERBOSE) # re.VERBOSE 管理复杂表达式
# 第二步:进行正则匹配
text = str(pyperclip.paste())
phonematches=[] # 创建电话号码列表
cellphonematches=[] # 创建手机号码列表
emailmatches=[] # 创建邮箱地址列表
# 查找匹配电话号码并添加到列表
for group in phoneRegex.findall(text):
phoneNumber = '-'.join([group[1],group[3],group[5]])
phonematches.append(phoneNumber)
# 查找匹配手机号码并添加到列表
for group in cellphoneRegex.findall(text):
cellphoneNumber = '-'.join([group[1],group[3],group[5]])
cellphonematches.append(cellphoneNumber)
# 查找匹配邮箱地址并添加到列表
for group in emailRegex.findall(text):
emailmatches.append(group[0])
# 第三步:打印结果
if len(phonematches) > 0:
print('查找电话号码:')
print('\n'.join(phonematches))
else:
print('没查找到任何电话号码')
print('\n-----------------------------------------------------')
if len(cellphonematches) > 0:
print('查找手机号码:')
print('\n'.join(cellphonematches))
else:
print('没查找到任何手机号码')
print('\n-----------------------------------------------------')
if len(emailmatches) > 0:
print('查找邮箱地址:')
print('\n'.join(emailmatches))
else:
print('没查找到任何邮箱地址')
print('\n-----------------------------------------------------')
私たちはその後、CSDNの実験対象として、家庭、クリップボードすべて選択をコピーし、プログラムを実行します。
次のように最終的な印刷結果は以下のとおりです。
今のところ、それは何も問題です。
-
第四に、リカバリディスクの概要
- 知識の再利用の理解を深めるために、このプロジェクトを通じ、参照[Pythonの]再兵器の基本:正規表現を
- できるだけカバーなど、すべての可能な過失がない一致するように発生した、と考えるために、一致コンテンツの形で組成物中の正規表現の難しさのうその構築
- きちんと印刷の内容と形式を統一する試合の最後の部分も非常に重要です
-