電話番号を正規表現でつかむ
6711 ワード
要件:
テキストに電話番号がたくさん含まれていると仮定します.番号は区番、電話番号、分機番号で構成され、異なる格があります.区番は3-4桁、括弧付き、「-」またはスペース接続、電話番号は8桁、分機番号は2-5桁、xまたはextまたは「-」で接続されている場合があります.CTRL A&CTRL Cでテキストをコピーしてクリップボードに貼り付けるように要求した後、プログラムを実行すると、その中のすべての電話番号をキャプチャすることができます.区番-電話番号-分機番号のフォーマットを統一する(例えば021-1234568-0123)
ステップ1:正規表現を書く
区番:かっこを付けない3~4桁の数字:d{3,4};かっこ付き3~4桁の数字:(d{3,4})式:(d{3,4}|(d{3,4}))
番号と電話番号の区切り:スペースまたは「-」:s|-
8桁の電話番号:d{8}
電話番号と分機番号の間隔はext,x,または"-"で接続される場合があります:s*(ext|x|-)s*
2-5ビット分機番号:d{2,5}式:(s*(ext|x|-)s*(d{2,5})?
完全な式:
ステップ2:フォーマットの統一
区番カッコが付いている場合はカッコを外して「-」で接続する必要があります
分機番号があるかどうかを判断し、ある場合は「-」で接続する
完全なコード:
Q&A
1.メールボックスを正規表現で一致させるにはどうすればいいですか?A: .*?@.*?..*
2.MATCH、SEAARCH、FINDALLの違いは何ですか?A:MATCHマッチングSEARCHは、一致した最初のオブジェクトFINDALLのみを返します.一致したすべてのオブジェクトを返します.
テキストに電話番号がたくさん含まれていると仮定します.番号は区番、電話番号、分機番号で構成され、異なる格があります.区番は3-4桁、括弧付き、「-」またはスペース接続、電話番号は8桁、分機番号は2-5桁、xまたはextまたは「-」で接続されている場合があります.CTRL A&CTRL Cでテキストをコピーしてクリップボードに貼り付けるように要求した後、プログラムを実行すると、その中のすべての電話番号をキャプチャすることができます.区番-電話番号-分機番号のフォーマットを統一する(例えば021-1234568-0123)
ステップ1:正規表現を書く
区番:かっこを付けない3~4桁の数字:d{3,4};かっこ付き3~4桁の数字:(d{3,4})式:(d{3,4}|(d{3,4}))
番号と電話番号の区切り:スペースまたは「-」:s|-
8桁の電話番号:d{8}
電話番号と分機番号の間隔はext,x,または"-"で接続される場合があります:s*(ext|x|-)s*
2-5ビット分機番号:d{2,5}式:(s*(ext|x|-)s*(d{2,5})?
完全な式:
phoneRegex=re.compile(r'''(
(\d{3,4}|\(\d{3,4}\))
(\s|-)
(\d{8})
(\s*(ext|x|-)\s*(\d{2,5}))
)''',re.VERBOSE)
ステップ2:フォーマットの統一
区番カッコが付いている場合はカッコを外して「-」で接続する必要があります
for groups in phoneRegex.findall(text):
phoneNum='-'.join([groups[1],groups[3]])
phoneNum=phoneNum.replace("(","").replace(")", "")
分機番号があるかどうかを判断し、ある場合は「-」で接続する
if groups[6] !='':
phoneNum+='-'+groups[6]
完全なコード:
import pyperclip,re
phoneRegex=re.compile(r'''(
(\d{3,4}|\(\d{3,4}\))
(\s|-)
(\d{8})
(\s*(ext|x|-)\s*(\d{2,5}))?
)''',re.VERBOSE)
text=str(pyperclip.paste())
matches=[]
for groups in phoneRegex.findall(text):
phoneNum='-'.join([groups[1],groups[3]])
phoneNum=phoneNum.replace("(","").replace(")", "")
if groups[6] !='':
phoneNum+='-'+groups[6]
matches.append(phoneNum)
print('
'.join(matches))
Q&A
1.メールボックスを正規表現で一致させるにはどうすればいいですか?A: .*?@.*?..*
2.MATCH、SEAARCH、FINDALLの違いは何ですか?A:MATCHマッチングSEARCHは、一致した最初のオブジェクトFINDALLのみを返します.一致したすべてのオブジェクトを返します.