質問するログイン新規登録
Python 3.x

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

Q&A

解決済

3回答

642閲覧

python:re.subの正規表現 任意の数字と文字を同時に置換する

Rain_4036

総合スコア4

Python 3.x

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

0グッド

0クリップ

投稿2022/10/07 09:02

編集2022/10/07 10:31

0

0

python:re.subの正規表現についての質問です。

txtA = 'f10003_a:0.01297835,f10003_au:0.01765928,f10003_sp:0.01835180:0.00364215:0.00467452,f10003_si:0.0195637............'
という文字列があります。
※太字の部分を残しイタリックの部分を削除する。

最終的には
a,au,sp,siという形を目指しています。
追記:残したい文字の中に数字が含まれる場合もあり、数字を一括で消すことができません。

そこで
ここから2つの情報をre.subの正規表現をつかって削除したいと考えています。
’f(間の1〜5桁数字)’_を削除

_’:0.(以降の8桁の数字)’_を削除
を行うことで達成できると思うのですが、正規表現の書き方がわからず困ってます。
どなたかご教授いただけると幸いです。

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

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

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

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

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

melian

2022/10/07 09:14

re.findall + join でもよいのではないでしょうか。 ','.join(re.findall(r'_(.+?):', txtA))
TakaiY

2022/10/07 09:32

(解答欄に書いてください > melianさん)
guest

回答3

0

文字列を見ると、以下のパタンの繰り返しのように見えます。

  1. f..._(アンダーバー手前まで)
  2. _(アンダーバー)
  3. _以降〜:手前まで (残したい部分)
  4. :以降〜,手前まで

このうちの、3) + , だけを残す案はどうでしょうか?

python

1import re 2 3s = 'f10003_a:0.01297835,' \ 4 'f10003_au:0.01765928,' \ 5 'f10003_s123p:0.01835180:0.00364215:0.00467452,' \ 6 'f10003_s789i:0.0195637' 7t = re.sub(r'f[^_]*_([^:]*)[^,]*', r'\1', s) 8print(t) # a,au,s123p,s789i

投稿2022/10/07 12:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

f(間の1〜5桁数字)’_を削除

_’:0.(以降の8桁の数字)’_を削除

を素直に正規表現にするなら、以下のような感じでしょう。

import re txtA = 'f10003_a:0.01297835,f10003_au:0.01765928,f10003_sp:0.01835180:0.00364215:0.00467452,f10003_si:0.0195637' b=re.sub('f\d+_','',txtA) c=re.sub(':[\d.]+','',b) print(c)

これで条件は満たされているはずで、

残したい文字の中に数字が含まれる場合もあり

というのが今ひとつよくわかりませんが、正しく状況を言い表しているのだとすれば、

d=re.sub('\d','',c)

を追加すればいいのでは。

投稿2022/10/07 10:49

KojiDoi

総合スコア13727

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

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

Rain_4036

2022/10/07 13:16

ありがとうございました。解決しました。 re.sub('f\d+_','',txtA)と書き表すことができることを理解してませんでした。 f\d+_と書いておくと間に数字がいくつあっても関係ないのですね。 色々調べてあれこれ試したのですが、こんな簡単なことで解決するのかと拍子抜けでした。
guest

0

それは正規表現でできます。

Python

1re.sub('\d+', '', s)) 2re.sub('f', '', s))

投稿2022/10/07 09:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Rain_4036

2022/10/07 10:28

そうしたのですが 残したい文字列の中に数字が含まれる場合があり、数字を一括で消すことができない状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問