ホームページ  >  記事  >  バックエンド開発  >  Pythonの正規表現でreモジュールを使用するにはどのような方法がありますか? reモジュールの使い方の紹介

Pythonの正規表現でreモジュールを使用するにはどのような方法がありますか? reモジュールの使い方の紹介

不言
不言オリジナル
2018-09-15 14:15:443036ブラウズ

この記事の内容は、Python の正規表現で re モジュールを使用する方法についてです。 re モジュールの使い方の紹介はある程度参考になるので、困っている友人は参考にしていただければ幸いです。

正規表現は、文字列を処理するために最も一般的に使用される方法であり、コーディングのあらゆる場所で正規表現が使用されています。

Python の正規表現は他の言語の正規表現とは少し異なります:

1. 文字列を置換する場合、置換された文字列は関数

2 、つまり分割になります。関数は分割数を指定できますが、これは落とし穴につながります。

3. 前の項目で定義された式は固定長である必要があります

以下は、使用方法の詳細な説明です。実際、注意してください 上記の 3 つの違いは問題ありません

1, match

説明:

re.match の試行文字列の先頭から一致する パターンが開始位置で正常に一致しない場合、match() は None を返します。

構文:

re.match(pattern, string, flags=0)

flags はオプションの識別子で、ビット単位または (|) を指定することで複数の識別子を取得できます。たとえば、re.I | re.M は I および M 識別子に設定されます:

##re.I一致の大文字と小文字を区別しないようにしますre.L##re.M

##Modifier

#説明

#ロケールを意識したマッチングを行う

複数行のマッチング、^ と $

##re.S
## に影響します

#make.改行を含むすべての文字と一致します

re.U

# Unicode 文字セットに従って文字を解析します。このフラグは \w、\W、\b、\B に影響します。

##re.X

このフラグを使用すると、より柔軟な形式が提供されるため、正規表現の記述が理解しやすくなります。

re.match メソッドは、一致が成功した場合、一致するオブジェクトを返します。group(num) または groups() 一致オブジェクト関数を使用して、一致する式を取得できます。 group() または group(0) は、正規表現全体の一致結果を返します。

例:

s= 'abc123abc'
print(re.match(&#39;[a-z]+&#39;, s))           # <_sre.SRE_Match object; span=(0, 3), match=&#39;abc&#39;>
print(re.match(&#39;[a-z]+&#39;, s).group(0))      # abc
print(re.match(&#39;[\d]+&#39;, s))            # None
print(re.match(&#39;[A-Z]+&#39;, s, re.I).group(0))   # abc
print(re.match(&#39;[a-z]+&#39;, s).span())       # (0, 3)

2、search

手順:

re.search は全体をスキャンします。文字 連結により、最初に一致したものが返されます。

構文:

re.search(pattern, string, flags=0)

re.search メソッドは、一致が成功した場合は一致するオブジェクトを返し、そうでない場合は返します。なし。一致式は、group(num) または groups() 一致オブジェクト関数を使用して取得できます。

例:

s = &#39;abc123abc&#39;
print(re.search(&#39;[a-z]+&#39;, s).group())  # abc
print(re.search(&#39;[a-z]+&#39;, s).span())   # (0, 3)
print(re.search(&#39;[\d]+&#39;, s).group())   # 123
print(re.search(&#39;[\d]+&#39;, s).span())    # (3, 6)
print(re.search(&#39;xyz&#39;, s))         # None

groupdict

groupdict 一致するすべての名前付きサブグループの辞書を返します。

print(re.search(&#39;[a-z]+&#39;, s).groupdict())          # {}
print(re.search(&#39;(?P<letter>[a-z]+)(?P<num>\d+)&#39;, s).groupdict())  # {&#39;num&#39;: &#39;123&#39;, &#39;letter&#39;: &#39;abc&#39;}

3、sub および subn

説明:

re.sub は、文字列内の一致する項目を置換するために使用されます。

re.subn は、置換された文字列と置換の数を含むタプルを返します。

構文:

sub(pattern, repl, string, count=0, flags=0)

repl: 置換される文字列は関数にすることもできます。

count: パターン マッチング後の置換の最大数。デフォルト値は 0 で、これはすべての一致を置換することを意味します。

例:

s = &#39;abc123abc&#39;
print(re.sub(&#39;[\d]+&#39;, &#39;数字&#39;, s))       # abc数字abc
print(re.sub(&#39;[a-z]+&#39;, &#39;字母&#39;, s, 1))   # 字母123abc
# 将匹配的数字乘以 2
def double(matched):
    value = int(matched.group(&#39;value&#39;))
    return str(value * 2)
# repl是一个函数
print(re.sub(&#39;(?P<value>\d+)&#39;, double, s))  # abc246abc
print(re.subn(&#39;[\d]+&#39;, &#39;数字&#39;, s))        # (&#39;abc数字abc&#39;, 1)
print(re.subn(&#39;[a-z]+&#39;, &#39;字母&#39;, s,))      # (&#39;字母123字母&#39;, 2)
print(re.subn(&#39;[a-z]+&#39;, &#39;字母&#39;, s, 1))     # (&#39;字母123字母&#39;, 1)

4、compile

説明:

re.compile は次の目的で使用されます。正規表現のコンパイル。match() と search() の 2 つの関数で使用する正規表現 (パターン) オブジェクトを生成します。

文法:

compile(pattern, flags=0)

例:

s = &#39;abc123abc&#39;
p = re.compile(&#39;[\d]+&#39;)
print(p.match(s, 4, 5).group(0))    # 2 从位置4开始匹配到位置5
print(p.search(s).group(0))         # 123

5, findall

説明:

re.findall は、文字列内の正規表現に一致するすべての部分文字列を検索し、リストを返します。一致するものが見つからない場合は、空のリストが返されます。

構文:

findall(pattern, string, flags=0)

例:

s = &#39;abc123abc&#39;
print(re.findall(&#39;[a-z]+&#39;, s))  # [&#39;abc&#39;, &#39;abc&#39;]
print(re.findall(&#39;[h-n]+&#39;, s))  # []

6, finditer

説明:

finditer は findall に似ており、文字列内の正規表現に一致するすべての部分文字列を検索し、それらをイテレータとして返します。

構文:

finditer(pattern, string, flags=0)

例:

s = &#39;abc123def&#39;
it = re.finditer(&#39;[a-z]+&#39;, s)
for match in it:    print(match.group())

7, split

説明:

re.split メソッドは、一致する部分文字列に従って文字列を分割し、リストを返します。

構文:

split(pattern, string, maxsplit=0, flags=0)

maxsplit: 分割数、maxsplit=1 は 1 回分割、デフォルトは 0、 no 回数を制限します。

例:

print(re.split(&#39;a&#39;, &#39;1A1a2A3&#39;, re.I))           # [&#39;1A1&#39;, &#39;2A3&#39;]# 输出结果并未能区分大小写,这是因为re.split(pattern,string,maxsplit, flags)默认是四个参数,当我们传入的三个参数的时候,系统会默认re.I是第三个参数,所以就没起作用。# 如果想让这里的re.I起作用,写成flags=re.I即可。
print(re.split(&#39;a&#39;, &#39;1A1a2A3&#39;, flags=re.I))     # [&#39;1&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;]

8、escape

説明:

re.escape for string内部の特殊な文字列はエスケープされます。

文法:

escape(pattern)

例:

print(re.escape(&#39;www.dxy.cn&#39;))  # www\.dxy\.cn

9、正規表現

"(?P8a11bc632ea32a57b3e3693c7987c420...)": グループ化し、8a11bc632ea32a57b3e3693c7987c420 という名前を付けます。

"(?P=name)": 別名が 8a11bc632ea32a57b3e3693c7987c420 であるグループによって一致する文字列を指します。

10. 先行詞(否定)の定義の特徴

先行詞の共通定義(?

(?<=aaa)   # 正确
(?<=aaa|bbb) # 正确
(?<=aaa|bb) # 错误
(?<=\d+)   # 错误
(?<=\d{3})  # 正确
## のように固定長である必要があるためです。 #関連する推奨事項:

Python でのロギング モジュールの用途は何ですか?ロギング モジュールの使用法の概要

Python モジュールの正規表現の詳細な紹介

以上がPythonの正規表現でreモジュールを使用するにはどのような方法がありますか? reモジュールの使い方の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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