Python でワイルドカードを使用して文字列を照合する方法

WBOY
リリース: 2023-05-06 12:13:06
転載
2072 人が閲覧しました

ワイルドカードを使用して文字列を一致させる:

  • fnmatch.filter() メソッドを使用して、パターンに一致する文字列をリストから取得します。

  • fnmatch.fnmatch() メソッドを使用して、文字列がパターンに一致するかどうかを確認します。

import fnmatch

a_list = ['fql.txt', 'jiyik.txt', 'com.csv']

pattern = '*.txt'
filtered_list = fnmatch.filter(a_list, pattern)
print(filtered_list)  # ????️ ['fql.txt', 'jiyik.txt']
ログイン後にコピー

Python でワイルドカードを使用して文字列を照合する方法

正規表現を使用したい場合は、次のサブタイトルまで下にスクロールしてください。

fnmatch.filter メソッドは、反復可能オブジェクトとパターンを受け入れ、指定されたパターンに一致する反復可能オブジェクト要素のみを含む新しいリストを返します。

例のパターンは、1 つ以上の任意の文字で始まり、.txt で終わります。

例のパターンにはワイルドカードが 1 つだけ含まれていますが、ワイルドカードは必要なだけ使用できます。

アスタリスク

# はすべて (1 つ以上の文字) に一致することに注意してください。

任意の 1 文字と一致させたい場合は、アスタリスク # を疑問符 ?

に置き換えます。
  • すべてに一致 (1 つ以上の文字)
  • ?
  • すべてに一致文字
  • [sequence]
  • は、シーケンス
  • [!sequence]
  • 内の任意の文字と一致します。連続していない任意の文字と一致します。

ここでは、疑問符を使用して任意の 1 文字と一致する例を示します。

import fnmatch

a_list = ['abc', 'abz', 'abxyz']

pattern = 'ab?'
filtered_list = fnmatch.filter(a_list, pattern)
print(filtered_list)  # ????️ ['abc', 'abz']
ログイン後にコピー

このパターンは、ab で始まり、その後に任意の 1 文字が続く文字列と一致します。 ワイルドカードを使用して文字列がパターンに一致するかどうかを確認する場合は、

fnmatch.fnmatch()

メソッドを使用します。

import fnmatch

a_string = '2023_jiyik.txt'
pattern = '2023*.txt'

matches_pattern = fnmatch.fnmatch(a_string, pattern)
print(matches_pattern)  # ????️ True

if matches_pattern:
    # ????️ this runs
    print('The string matches the pattern')
else:
    print('The string does NOT match the pattern')
ログイン後にコピー
パターンは 2023 で始まり、その後に 1 つ以上の任意の文字が続き、

.txt
で終わります。

fnmatch.fnmatch このメソッドは、文字列とパターンをパラメータとして受け取ります。文字列がパターンと一致する場合、メソッドは True を返し、それ以外の場合は False を返します。 1 つ以上の文字ではなく、任意の 1 文字と一致させたい場合は、アスタリスク # を疑問符

?
に置き換えます。

あるいは、正規表現を使用することもできます。

ワイルドカードを使用して正規表現を使用して文字列を一致させる

ワイルドカードを使用して文字列を一致させる:

Use re.match()メソッドは、文字列が指定されたパターンに一致するかどうかをチェックします。ワイルドカード文字の代わりに

.*

文字を使用します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">import re a_list = [&amp;#39;2023_fql.txt&amp;#39;, &amp;#39;2023_jiyik.txt&amp;#39;, &amp;#39;2023_com.csv&amp;#39;] regex = re.compile(r&amp;#39;2023_.*\.txt&amp;#39;) list_of_matches = [ item for item in a_list if re.match(regex, item) ] print(list_of_matches) # ????️ [&amp;#39;2023_fql.txt&amp;#39;, &amp;#39;2023_jiyik.txt&amp;#39;]</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>re.compile メソッドは、正規表現パターンを match() または

search()# を使用して使用できるオブジェクトにコンパイルします # # 一致するメソッド。

これは、正規表現オブジェクトを保存して再利用するため、re.match または re.search

を直接使用するよりも効率的です。

正規表現は 2023__

で始まります。

正規表現内の .*

文字は、1 つ以上の文字と一致するワイルドカードとして使用されます。
  • ドット .

    は、改行文字を除く任意の文字と一致します。
  • アスタリスク #は、前の正規表現 (ドット .

    ) と 0 回以上一致します。

バックスラッシュ\ 文字を使用してドットをエスケープします。前に見たように、ドット .

は正規表現で使用される場合に特別な意味を持つためです。つまり、ドットを処理するためにバックスラッシュを使用します。リテラル文字として。

リスト内包表記を使用して、文字列のリストを反復処理します。

リスト内包表記は、各要素に対して特定の操作を実行するか、条件を満たす要素のサブセットを選択するために使用されます。

各反復では、re.match()

メソッドを使用して、現在の文字列がパターンと一致するかどうかを確認します。

<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">import re a_list = [&amp;#39;2023_fql.txt&amp;#39;, &amp;#39;2023_jiyik.txt&amp;#39;, &amp;#39;2023_com.csv&amp;#39;] regex = re.compile(r&amp;#39;2023_.*\.txt&amp;#39;) list_of_matches = [ item for item in a_list if re.match(regex, item) ] print(list_of_matches) # ????️ [&amp;#39;2023_fql.txt&amp;#39;, &amp;#39;2023_jiyik.txt&amp;#39;]</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>re.match

メソッドは、指定された正規表現が文字列内で一致する場合に一致オブジェクトを返します。

文字列が正規表現パターンと一致しない場合、match() メソッドは None

を返します。

新しいリストには、パターンに一致する元のリストの文字列のみが含まれます。

任意の 1 文字のみを一致させたい場合は、正規表現内のドット *.

の後のアスタリスクを削除します。

import re

a_list = [&#39;2023_a.txt&#39;, &#39;2023_bcde.txt&#39;, &#39;2023_z.txt&#39;]

regex = re.compile(r&#39;2023_.\.txt&#39;)

list_of_matches = [
    item for item in a_list
    if re.match(regex, item)
]

print(list_of_matches)  # ????️ [&#39;2023_a.txt&#39;, &#39;2023_z.txt&#39;]
ログイン後にコピー
ドット .

改行を除く任意の文字と一致します。

エスケープせずにドット . を使用すると、正規表現は、2023__ で始まり、その後に ## で終わる任意の 1 文字が続くものと一致します。 # で終わる文字列。TXT###。

正規表現の読み取りまたは書き込みについてサポートが必要な場合は、正規表現チュートリアルを参照してください。

このページには、すべての特殊文字のリストと多くの役立つ例が含まれています。

正規表現を使用して文字列がパターンに一致するかどうかを確認する場合は、

re.match() メソッドを直接使用できます。

import re

a_string = &#39;2023_fql.txt&#39;

matches_pattern = bool(re.match(r&#39;2023_.*\.txt&#39;, a_string))
print(matches_pattern)  # ????️ True

if matches_pattern:
    # ????️ this runs
    print(&#39;The string matches the pattern&#39;)
else:
    print(&#39;The string does NOT match the pattern&#39;)
ログイン後にコピー

如果字符串与模式匹配,则 re.match() 方法将返回一个匹配对象,如果不匹配,则返回 None

我们使用 bool() 类将结果转换为布尔值。

如果要对单个字符使用通配符,请删除星号 *

import re

a_string = &#39;2023_ABC.txt&#39;

matches_pattern = bool(re.match(r&#39;2023_.\.txt&#39;, a_string))
print(matches_pattern)  # ????️ False

if matches_pattern:
    print(&#39;The string matches the pattern&#39;)
else:
    # ????️ this runs
    print(&#39;The string does NOT match the pattern&#39;)
ログイン後にコピー

请注意 ,点 . 我们没有使用反斜杠作为前缀用于匹配任何单个字符,而点 . 我们以反斜杠 \ 为前缀的被视为文字点。

示例中的字符串与模式不匹配,因此 matches_pattern 变量存储一个 False 值。

以上がPython でワイルドカードを使用して文字列を照合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート