ホームページ  >  記事  >  バックエンド開発  >  いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

PHPz
PHPz転載
2023-04-14 18:07:051537ブラウズ

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

正規表現は、テキストの検索、編集、操作に使用できます。 Python RegEx はほぼすべての企業で広く使用されており、アプリケーションにとって業界でのアピール力が高いため、正規表現の重要性がますます高まっています。

今日は Python の正規表現を一緒に学びましょう。

正規表現を使用する理由。

この質問に答えるために、まず、正規表現を使用することで解決できる、直面するさまざまな問題を見てみましょう。

次のシナリオを考えてみましょう:

記事の最後に、大量のデータを含むログ ファイルがあります。このログ ファイルから、日付と時刻のみを取得したいと考えています。 。一見すると、ログ ファイルの可読性は非常に低いです。

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。


# この場合、正規表現を使用してパターンを識別し、必要な情報を簡単に抽出できます。

次のシナリオを考えてみましょう。あなたは営業担当者で、多くの電子メール アドレスを持っていますが、その多くは偽/無効です。下の画像を見てください。

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

できることは、正規表現を使用することです。これにより、電子メール アドレスの形式が検証され、本物の ID から偽の ID が除外されます。

次のシナリオは営業担当者の例と非常によく似ています。次の図を考慮してください:

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

電話番号を確認して比較する方法原産国に基づいて並べ替えますか?

正しい数値にはそれぞれ、正規表現を使用して追跡および追跡できる特定のパターンがあります。

次は別の簡単なシナリオです:

名前、年齢、住所などの詳細を含む学生のデータベースがあります。学区コードが元々は 59006 だったが、現在は 59076 に変更されている状況を考えてみましょう。このコードを生徒ごとに手動で更新すると、非常に時間がかかり、プロセスが非常に長くなります。

基本的に、正規表現を使用してこれらの問題を解決するには、まず学生データから PIN コードを含む特定の文字列を見つけて、それらをすべて新しい文字列に置き換えます。

正規表現とは

正規表現は、テキスト文字列内の検索パターンを識別するために使用されます。また、データの正確性を見つけるのにも役立ち、正規表現を使用して次のような操作を実行することもできます。データの検索、置換、およびフォーマット。

次の例を考えてみましょう:

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

指定された文字列のすべてのデータのうち、都市のみが必要であると仮定すると、これはフォーマットされた形式で変換できます。 way to 名前と都市のみを含む辞書。ここでの問題は、名前と都市を推測するパターンを特定できるかということです。あと年齢が上がると年齢もわかるので簡単ですよね?それは単なる整数です。

この名前をどうするか?パターンを見ると、すべての名前が大文字で始まります。正規表現を使用すると、この方法で名前と年齢を識別できます。

次のコードを使用できます

import re
Nameage = '''
Janice is 22 and Theon is 33
Gabriel is 44 and Joey is 21
'''
ages = re.findall(r'd{1,3}', Nameage)
names = re.findall(r'[A-Z][a-z]*',Nameage)
ageDict = {}
x = 0
for eachname in names
ageDict[eachname] = ages[x]
x+=1
print(ageDict)

出力:

{'Janice': '22', 'Theon': '33', 'Gabriel': '44', 'Joey': '21'}

正規表現の例:

次のコードを使用できます。正規表現 式は多くの操作を実行します。ここでは、正規表現の使用法をよりよく理解するために非常に重要な事項をいくつかリストしました。

まず、文字列内の特定の単語を検索する方法を確認しましょう

文字列内の単語を検索します

import re
if re.search("inform","we need to inform him with the latest information"):
print("There is inform")

ここで行ったことは次のとおりです。すべては、検索文字列に存在する単語「inform」を検索することについてです。

もちろん、次のコードを最適化することもできます。

import re
allinform = re.findall("inform","We need to inform him with the latest information!")
for i in allinform:
print(i)

ここでは、この特別なケースでは、infor が 2 回見つかります。 1 つは情報から来ており、もう 1 つは情報から来ています。

上で示したように、正規表現内の単語を検索するのは非常に簡単です。

次に、正規表現を使用してイテレータを生成する方法を学びます。

イテレータの生成

イテレータの生成は、文字列の開始インデックスと終了インデックスを検索してターゲットにする簡単なプロセスです。次の例を考えてみましょう:

import re
Str = "we need to inform him with the latest information"
for i in re.finditer("inform.", Str
locTuple = i.span()
print(locTuple)

見つかった一致ごとに、開始インデックスと終了インデックスが出力されます。上記のプログラムを実行すると、出力は次のようになります。

(11, 18)
(38, 45)

次に、正規表現を使用して単語とパターンを一致させる方法を確認します。

将单词与模式匹配

考虑一个输入字符串,我们必须将某些单词与该字符串匹配。要详细说明,请查看以下示例代码:

import re
Str = "Sat, hat, mat, pat"
allStr = re.findall("[shmp]at", Str)
for i in allStr:
print(i)

字符串中有什么共同点?可以看到字母“a”和“t”在所有输入字符串中都很常见。代码中的 [shmp] 表示要查找的单词的首字母,因此,任何以字母 s、h、m 或 p 开头的子字符串都将被视为匹配,其中任何一个,并且最后必须跟在“at”后面。

Output:

hat
mat
pat

接下来我们将检查如何使用正则表达式一次匹配一系列字符。

匹配一系列字符范围

我们希望输出第一个字母应该在 h 和 m 之间并且必须紧跟 at 的所有单词。看看下面的例子,我们应该得到的输出是 hat 和 mat

import re
Str = "sat, hat, mat, pat"
someStr = re.findall("[h-m]at", Str)
for i in someStr:
print(i)

Output:

hat
mat

现在让我们稍微改变一下上面的程序以获得一个不同的结果

import re
Str = "sat, hat, mat, pat"
someStr = re.findall("[^h-m]at", Str)
for i in someStr:
print(i)

发现细微差别了吗,我们在正则表达式中添加了插入符号 (^),它的作用否定了它所遵循的任何效果。我们不会给出从 h 到 m 开始的所有内容的输出,而是会向我们展示除此之外的所有内容的输出。

我们可以预期的输出是不以 h 和 m 之间的字母开头但最后仍然紧随其后的单词。Output:

sat
pat

替换字符串:

接下来,我们可以使用正则表达式检查另一个操作,其中我们将字符串中的一项替换为其他内容:

import re
Food = "hat rat mat pat"
regex = re.compile("[r]at")
Food = regex.sub("food", Food)
print(Food)

在上面的示例中,单词 rat 被替换为单词 food。正则表达式的替代方法就是利用这种情况,它也有各种各样的实际用例。Output:

hat food mat pat

反斜杠问题

import re
randstr = "Here is Edureka"
print(randstr)

Output:

Here is Edureka

这就是反斜杠问题,其中一个斜线从输出中消失了,这个特殊问题可以使用正则表达式来解决。

import re
randstr = "Here is Edureka"
print(re.search(r"Edureka", randstr))

Output:

<re.Match object; span=(8, 16), match='Edureka'>

这就是使用正则表达式解决反斜杠问题的简单方法。

匹配单个字符

使用正则表达式可以轻松地单独匹配字符串中的单个字符

import re
randstr = "12345"
print("Matches: ", len(re.findall("d{5}", randstr)))

Output:

Matches: 1

删除换行符

我们可以在 Python 中使用正则表达式轻松删除换行符

import re
randstr = '''
You Never
Walk Alone
Liverpool FC
'''
print(randstr)
regex = re.compile("
")
randstr = regex.sub(" ", randstr)
print(randstr)

Output:

You Never
Walk Alone
Liverpool FC
You Never Walk Alone Liverpool FC

可以从上面的输出中看到,新行已被空格替换,并且输出打印在一行上。

还可以使用许多其他东西,具体取决于要替换字符串的内容

: Backspace
: Formfeed
: Carriage Return
: Tab
: Vertical Tab

可以使用如下代码

import re
randstr = "12345"
print("Matches:", len(re.findall("d", randstr)))

Output:

Matches: 5

从上面的输出可以看出,d 匹配字符串中存在的整数。但是,如果我们用 D 替换它,它将匹配除整数之外的所有内容,与 d 完全相反。

接下来我们了解一些在 Python 中使用正则表达式的重要实际例子。

正则表达式的实际例子

我们将检查使用最为广泛的 3 个主要用例

  •  电话号码验证
  •  电子邮件地址验证
  •  网页抓取

电话号码验证

需要在任何相关场景中轻松验证电话号码

考虑以下电话号码:

  • 444-122-1234
  • 123-122-78999
  • 111-123-23
  • 67-7890-2019

电话号码的一般格式如下:

  • 以 3 位数字和“-”符号开头
  • 3 个中间数字和“-”号
  • 最后4位数

我们将在下面的示例中使用 w,请注意 w = [a-zA-Z0-9_]

import re
phn = "412-555-1212"
if re.search("w{3}-w{3}-w{4}", phn):
print("Valid phone number")

Output:

Valid phone number

电子邮件验证

在任何情况下验证电子邮件地址的有效性。

考虑以下电子邮件地址示例:

  • Anirudh@gmail.com
  • Anirudh@com
  • AC.com
  • 123 @.com

我们只需一眼就可以从无效的邮件 ID 中识别出有效的邮件 ID,但是当我们的程序为我们做这件事时,却并没有那么容易,但是使用正则,就非常简单了。

指导思路,所有电子邮件地址应包括:

  • 1 到 20 个小写和/或大写字母、数字以及 . _ % +
  • 一个@符号
  •  2 到 20 个小写和大写字母、数字和加号
  • 一个点号
  • 2 到 3 个小写和大写字母

import re
email = "ac@aol.com md@.com @seo.com dc@.com"
print("Email Matches: ", len(re.findall("[w._%+-]{1,20}@[w.-]{2,20}.[A-Za-z]{2,3}", email)))

Output:

Email Matches: 1

从上面的输出可以看出,我们输入的 4 封电子邮件中有一封有效的邮件。

这基本上证明了使用正则表达式并实际使用它们是多么简单和高效。

网页抓取

从网站上删除所有电话号码以满足需求。

要了解网络抓取,请查看下图:

いくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。

我们已经知道,一个网站将由多个网页组成,我们需要从这些页面中抓取一些信息。

网页抓取主要用于从网站中提取信息,可以将提取的信息以 XML、CSV 甚至 MySQL 数据库的形式保存,这可以通过使用 Python 正则表达式轻松实现。

import urllib.request
from re import findall
url = "http://www.summet.com/dmsi/html/codesamples/addresses.html"
response = urllib.request.urlopen(url)
html = response.read()
htmlStr = html.decode()
pdata = findall("(d{3}) d{3}-d{4}", htmlStr)
for item in pdata:
print(item)

Output:

(257) 563-7401
(372) 587-2335
(786) 713-8616
(793) 151-6230
(492) 709-6392
(654) 393-5734
(404) 960-3807
(314) 244-6306
(947) 278-5929
(684) 579-1879
(389) 737-2852
...

我们首先是通过导入执行网络抓取所需的包,最终结果包括作为使用正则表达式完成网络抓取的结果而提取的电话号码。

以上がいくつかの Python 正規表現をコンパイルしました。これらを取得して使用できます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。