質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

613閲覧

Pythonの正規表現について

AbcdefgFirst

総合スコア33

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/14 08:15

編集2020/09/14 10:22

お世話になっております。
下記のようなリストがあり、検索値に一致した数を出したいのですが正規表現の書き方が色々試しても分かりません。

Python

1list = ['ab-cdef-gh', 'ab-cdef-gh-1', 'ab-cdef-gh-2'] 2 3search_words = ['ab-abwd-ab','bc-wmgw-ho','ab-cdef-gh',...] 4 5for i in search_words: 6 if i in list: 7 print(list.count(i))

上記のコードだとab-cdef-ghについてはカウントされているのですが、ab-cdef-ghを含むカウントの記述の仕方が分かりません。

下記のコードなどを調べて書いてみたのですが、希望通りの検索文字列になっていないようです。。

Python

1list = [ab-cdef-gh, ab-cdef-gh-1, ab-cdef-gh-2] 2 3for i in search_words: 4 if i in list: 5 regex = r'(?=\b)' + re.escape(i) + r'(?=\b)' 6 print(list.count(regex))

記述の仕方についてご教示頂けませんでしょうか。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2020/09/14 10:05

「ab-cdef-gh」とは、具体的に何なのでしょう。そのままだと、変数abから変数cdefと変数ghの値を引いた数値、ってことになりますが。それとも、"ab-cdef-gh"という文字列? それから、search_wordsの具体例も挙げないと、「検索値に一致した数」とは何を示しているのか伝わりません。なにしろ、突然未定義の変数 l が出てくるので。
AbcdefgFirst

2020/09/14 10:24

Daregada様 ご回答ありがとうございます。説明不足で失礼致しました。 search_wordsというリストの中を1行ずつループしてlistの中に「ab-abwd-ab」「bc-wmgw-ho」を含む文字列があった場合にその数をカウントしたいです。 宜しくお願い致します。
Daregada

2020/09/14 10:33 編集

listという名前の「文字列のリスト」に含まれる文字列が、search_wordという名前の「文字列のリスト」に含まれる文字列に部分一致するか、を調べたいということでいいのかな? 「カウントしたいです」に書いてある文字列と、質問文の文字列が一致していないので意味不明です。
AbcdefgFirst

2020/09/14 10:40

ご回答ありがとうございます。 search_words = ['ab-abwd-ab','bc-wmgw-ho','ab-cdef-gh',...]を1つずつリストの中から検索して、 「ab-abwd-ab」はリストに無いので0、「bc-wmgw-ho」もリストに無いので0、「ab-cdef-gh」についてはリストにab-cdef-ghを含む文字列があるため3とカウントしたいです。 宜しくお願い致します。
toast-uz

2020/09/14 11:53 編集

search_words = ['a','-',...]の場合、期待されるカウント結果はいくつになりますでしょうか?質問文だとそれが少し曖昧に感じます。2、3、6、11など、解釈はいろいろありえます。
AbcdefgFirst

2020/09/14 12:15

toast-uz様 ご回答ありがとうございます。 search_wordsがaの場合は、期待するカウント数は0になります。 説明が下手で申し訳ないのですが、[ab-cdef-gh]ひとかたまりが含まれているかどうかをカウントしたいです。 宜しくお願い致します。
toast-uz

2020/09/14 12:24 編集

'ab-cdef-gh' ひとかたまりが含まれているかどうかカウントするのは、search_wordsに、'ab-cdef-gh'が含まれている場合、ですよね。そのsearch_wordsが、'a'だったり'-'だったりしたら、カウント結果はどうなるのでしょうか?特に、search_wordsの複数が同時にマッチしたらカウント結果をいくつにしたいのか、などを確認したいです。 「ab-cdef-ghを含むカウントの記述の仕方」として期待する結果は3ですよね。だとすると、'a'は全てのlist要素に含むので、カウントは3になると思いますし、'-'は全てのlistに複数含むので、カウントは3または8になるものと思います。そうすると、search_words =[''a', '-']の場合、カウント結果は0にはならないと思います。3なのか6なのか11なのか・・・。
AbcdefgFirst

2020/09/14 12:45

ご回答ありがとうございます。 回答頂いてそこまで考えが至っておりませんでした。。 search_wordsについては最小の形式が「ab-cdef-gh」といった形になるので、aや-などは入ってきません。 説明不足で申し訳ございません。宜しくお願い致します。
toast-uz

2020/09/14 13:44

すみません、ずっと質疑の意図が食い違っています。 search_wordsの形式を聞いているのではありません。 ・「一致」とは何か ・「一致した数」とは何か といった、質問の言葉が、きちんと定義されていないので、定義をして欲しいとお願いしています。その例として、仮にsearch_wordsが、aとか-だったら、一致した数はいくつになるのですか、と聞いております。仮にこうなったら、の話として聞いているのに、そうはなりません、と答えられている状態になります。
AbcdefgFirst

2020/09/15 07:55

ご回答ありがとうございます。 理解不足ですみません。 頂いたコードで希望の出力が出来たため一旦クローズ致します。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

listは関数名と被るのでtarget_listに名前を変更してあります。

Python

1target_list = ['ab-cdef-gh', 'ab-cdef-gh-1', 'ab-cdef-gh-2'] 2search_words = ['ab-abwd-ab', 'bc-wmgw-ho', 'ab-cdef-gh'] 3 4 5for word in search_words: 6 count = 0 7 for target in target_list: 8 if word in target: 9 count += 1 10 print(f"{word}: {count}")

投稿2020/09/14 13:50

編集2020/09/15 00:37
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbcdefgFirst

2020/09/15 00:19

Daregada様 ご回答ありがとうございます。 頂いたコードを試したところ、下記の出力となりました。 ------------- ab-abwd-ab: 0 bc-wmgw-ho: 0 ab-cdef-gh: 3 search_wordsが今回は要素3つでしたが、増やしてみたところカウントが下記の通りとなりました。 search_words = ['ab-abwd-ab', 'bc-wmgw-ho', 'ab-cdef-gh','id-segf-oo','ss-fiwk-ff'] --------- ab-abwd-ab: 0 bc-wmgw-ho: 0 ab-cdef-gh: 3 id-segf-oo: 3 ss-fiwk-ff: 3 countの位置はこの位置で合っていますでしょうか? 度々すみません。宜しくお願い致します。
Daregada

2020/09/15 00:37

すまん。count = 0はひとつめのループの中に入れてください。
AbcdefgFirst

2020/09/15 07:53

ご回答ありがとうございます。 希望の通り出力できました。 アドバイス頂きありがとうございました。
Daregada

2020/09/15 08:13

タイトルの「正規表現」は使う必要がなかった、ということですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問