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

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

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

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

Q&A

解決済

2回答

840閲覧

PythonのList内の要素を正規表現で変換する方法

ockn

総合スコア5

Python 3.x

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

0グッド

0クリップ

投稿2020/02/26 17:54

編集2020/02/26 18:10

前提・実現したいこと

次のようなListで、'.'で区切られた部分で''や'?'を一つでも含む部分を''のみに変換したい場合、どのように書けば良ろしいでしょうか。

Python

1# 変換前 2urls = [ 3'watson.telemetry.microsoft.com', 4'*.svc.ms', 5'*-files.sharepoint.com', 6'?-myfiles.sharepoint.com', 7'r3.res.outlook.com' 8] 9 10# 変換後 11urls_after = [ 12'watson.telemetry.microsoft.com', 13'*.svc.ms', 14'*.sharepoint.com', 15'*.sharepoint.com', 16'r3.res.outlook.com' 17]

試したこと(ダメなコード)

python

1def format_urls_after(urls): 2 urls_after = copy.deepcopy(urls) 3 for i in range(len(urls_after)): 4 tokens = urls_after[i].split('.') 5 url = [re.sub('*[/*/?]*', '*', t) for t in tokens] 6 urls_after[i] = '.'.join(url) 7 return urls_after

発生している問題・エラーメッセージ

正規表現部分で実行が止まってしまいました。 そもそも全体的にもっとうまい書き方がありそうな気がしております。

何卒、良い例をご教示のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

正規表現内のエスケープは/ではなく\を使います。
私なら以下のように書きます。

Python

1import re 2 3urls = [ 4'watson.telemetry.microsoft.com', 5'*.svc.ms', 6'*-files.sharepoint.com', 7'?-myfiles.sharepoint.com', 8'r3.res.outlook.com' 9] 10 11def format_url(url): 12 return '.'.join(['*' if re.search('*|?', t) else t for t in url.split('.')]) 13 14urls_after = [format_url(url) for url in urls] 15print(urls_after) 16# ['watson.telemetry.microsoft.com', '*.svc.ms', '*.sharepoint.com', '*.sharepoint.com', 'r3.res.outlook.com']

投稿2020/02/26 19:09

can110

総合スコア38262

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

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

ockn

2020/02/27 03:08

早速ご回答を下さり、誠にありがとうございます! こちらでトライさせて頂きます。
guest

0

正規表現を使わずに書いてみました。

pat.py

python3

1urls = [ 2 'watson.telemetry.microsoft.com', 3 '*.svc.ms', 4 '*-files.sharepoint.com', 5 '?-myfiles.sharepoint.com', 6 'r3.res.outlook.com', 7 'asdfaasdf', 8 ''] 9 10def convert_url(url): 11 m = url.split('.') 12 if m[0] and ("*" in m[0] or "?" in m[0]): 13 m[0] = '*' 14 15 return('.'.join(m)) 16 17urls_after = list(map(convert_url, urls)) 18print(urls_after) 19print() 20 21url_after = [convert_url(x) for x in urls] 22print(url_after)

実行例
イメージ説明

map() を使うか 内包表記をつかうかは、好きな方を使えば良いと思います。

投稿2020/02/26 22:10

katoy

総合スコア22324

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

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

ockn

2020/02/27 03:05

早速ご回答を下さり、誠にありがとうございます! mapというのもあるのですね、勉強になります。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問