ホームページ  >  記事  >  バックエンド開発  >  Python正規表現学習のまとめ

Python正規表現学習のまとめ

高洛峰
高洛峰オリジナル
2017-01-12 16:28:101104ブラウズ

Python で規則性を実装する方法は、re (正規表現の略) モジュールを使用して、さまざまな機能を実現するために re モジュールのさまざまなメソッドを呼び出すことができます。と呼ばれ、これらのメソッドの機能は何ですか; 正規表現の例とさまざまな特殊記号の意味もあります:

1. re.sub と replace:

sub の完全なスペルも置換されます。置き換えるという意味であることが分かりましたので、例で使用するのは簡単ですが、実際には置き換えという意味もありますが、それらの類似点と相違点を例を使って詳しく説明します。

>>> import re
>>> str1 = 'Hello 111 is 222'
>>> str2 = str1.replace('111','222')
>>> print(str2)
Hello 222 is 222
>>>

これは簡単な例ですが、以下のような状況で数値をすべて222に置き換える場合、replaceを使って実装する方が面倒ですが、reモジュールのsubメソッドを使うと比較的簡単に実装できます。 : (より複雑な操作の場合は、replace が使用できない場合があります。)

>>> import re
>>> str1 = 'Hello 123 is 456'
>>> str2 = re.sub('\d+','222',str1)
>>> print(str2)
Hello 222 is 222
>>>

2. re.search() と re.match():

match: 正規表現の先頭からのみ一致します。の string 、一致が成功した場合は matchobject を返し、それ以外の場合は none を返します。

検索: 文字列のすべての文字列を正規表現と一致させようとします。すべての文字列が正常に一致しない場合は none を返し、それ以外の場合は matchobject を返します。

この例は、match と search の類似点と相違点を示し、実際のアプリケーションでは依然として検索の方が頻繁に使用されていることを示しています:

import re
str = 'helloword,i am alex'
if not re.match('word',str):
print('cannot match')
print(re.match('hello',str1).group())
print(re.search('word',str1).group())
#显示结果
cannot match
hello
word


3. re.split:

Python では、文字列を分割するにはstrのsplitメソッドを呼び出すだけですが、この分割は特定の文字に基づいてのみ分割できます。同時に複数の文字を指定して分割することはできません。 。

幸いなことに、 re モジュールには文字列を分割するための split メソッドも用意されており、このメソッドは同時に複数の文字に基づいて分割することができます。 str の分割と re の分割を見てみましょう。それぞれ違いは何ですか:

str1 = 'helloword,i;am\nalex'
str2 = str1.split(',')
print(str2)
import re
str3 = re.split('[,|;|\n]',str1)
print(str3)
#下面是不同的输出结果
['helloword', 'i;am\nalex']
['helloword', 'i', 'am', 'alex']


ここから、上記の信憑性がわかります。

4. findall:

findallメソッドは基本的にcompileメソッドと同時に登場します:

まずcompileは正規表現の文字列形式をパターンインスタンスに変換してからUseします。 patte インスタンスで findall メソッドを呼び出し、一致オブジェクトを生成して結果を取得します。それらを結合する前に、まず正規表現内のプリセット特殊文字の意味を見てみましょう。

d は任意の 10 進数に一致します。クラス[0-9]へ。

D は数値以外の文字と一致します。これはクラス [^0-9] と同等です。

s は任意の空白文字に一致します; それはクラス ["t"n"r"f"v] と同等です。

S は任意の非空白文字に一致します; それはクラス [^ "t"n"r" と同等ですF V ]。

w は任意の英数字に一致し、クラス [a-zA-Z0-9_] と同等です。

W は英数字以外の文字に一致します。これはクラス [^a-zA-Z0-9_] と同等です。

これらの特殊文字の意味を読んだ後、上記の議論を説明するために別の例を挙げてみましょう:

import re
str1 = 'asdf12dvdve4gb4'
pattern1 = re.compile('\d')
pattern2 = re.compile('[0-9]')
mch1 = pattern1.findall(str1)
mch2 = pattern2.findall(str1)
print('mch1:\t%s'% mch1)
print('mch2:\t%s'% mch2)
#输出结果
mch1: ['1', '2', '4', '4']13 mch2: ['1', '2', '4', '4']


上記の 2 つの例は、上記の議論をよく説明し、特殊文字 d が実際に[0-9]と同じで、出力結果からもわかるように、各数字を要素に分割してリストに入れるのではなく、全体として12を出力したい場合は、 then you can do this: (これは、d の後に + 記号を追加することで実現されます。ここでの + 記号は、1 つ以上の連結された 10 進数を全体として出力することを意味します)

import re
str1 = 'asdf12dvdve4gb4'
pattern1 = re.compile('\d+')
pattern2 = re.compile('[0-9]')
mch1 = pattern1.findall(str1)
mch2 = pattern2.findall(str1)
print('mch1:\t%s'% mch1)
print('mch2:\t%s'% mch2)
#输出结果
mch1: ['12', '4', '4']
mch2: ['1', '2', '4', '4']


小さな例を挙げると、この例です。特殊文字と re のサブ関数を組み合わせて、文字列内のすべてのスペースを削除します。

5. メタ文字:

通常、バイナリ文字と呼ばれるものには、次の 2 つがあります。 } [ ] | ( )

最初に調べるメタキャラクターは「[」と「]」です。これらは、一致させる文字セットである文字カテゴリを指定するためによく使用されます。文字を個別にリストすることも、「-」記号で区切られた 2 つの指定された
文字を使用して文字範囲を表すこともできます。たとえば、[abc] は「a」、「b」、「c」のいずれかの文字に一致します。また、[a-c] の間隔を使用して同じ文字セットを表すこともでき、前者と同じ効果があります。小文字のみを一致させたい場合は、RE を [a-z] と記述する必要があります。カテゴリではメタ文字は効果がありません。たとえば、[akm$] は文字「a」、「k」、「m」、または「$」のいずれかと一致します。「$」は通常メタ文字として使用されますが、文字クラス内ではその特性は削除されます。 , 通常の文字

記号に戻ります。


    []:元字符[]表示字符类,在一个字符类中,只有字符^、-、]和\有特殊含义。字符\仍然表示转义,字符-可以定义字符范围,字符^放在前面,表示非.(这个在上面的特殊字符示例中也有提现),

    + 匹配+号前内容1次至无限次
    ? 匹配?号前内容0次到1次
    {m} 匹配前面的内容m次
    {m,n} 匹配前面的内容m到n次

    下面通过一个小例子,来阐述一下上面的字符在元字符[]中的使用:(在下面的这个例子中,要注意的有两点:一是在\d+后面的?号的含义,二是在匹配的前面加上了一个字符r,其实在这个示例中,加与不加都可以显示一样的结果)

>>> import re
>>> print(re.findall(r"a(\d+?)","a123b"))
['1']
>>> print(re.findall(r"a(\d+)","a123b"))
['123']
>>>


以上所述是小编给大家介绍的python 正则表达式学习小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多python 正则表达式学习小结相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。