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

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

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

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

Q&A

解決済

3回答

250閲覧

文字列に数字があるか判定し、あればその数字を得る

TanakashiXr

総合スコア57

Python 3.x

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

0グッド

0クリップ

投稿2018/11/18 17:47

編集2018/11/18 20:53

タイトル通りです。
以下のような文字列があるとした場合にまず数字があるか判定したのちに、textとその数字を別々に得たいのです。

「Spam: text 1」

ご教授よろしくお願いいたします。

追記

完成したコード

Python

1elif "Spam: " in msg.text: 2 #bctxt = msg.text.replace("Spam: ", "") 3 x = re.split('(\d+)', msg.text) 4 if len(x)==1: 5 cl.sendMessage(to, "数字が含まれていません") 6 else: 7 for i in range(0, len(x), 2):#数字以外 8 #print(i,x[i]) 9 bctxt = i,x[i] 10 for i in range(1, len(x), 2):#数字 11 #print(i,x[i]) 12 t = i,x[i] 13 while(t): 14 cl.sendMessage(to, bctxt) 15 t-=1

エラー

[ ERROR ] encoding or errors without a string argument

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

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

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

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

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

guest

回答3

0

正規表現でできます。
正規表現は慣れないと使いづらいですが、身につければ簡潔なコードで目的の結果を得ることができるようになります。

参考:
re — 正規表現操作
Pythonの正規表現モジュールreの関数match、search、sub

以下は「アルファベット以外」で始まりその後ろの「アルファベット」部分を抽出する例です。

Python

1import re 2r = re.compile('([^a-zA-Z]*)([a-zA-Z]+)[^a-zA-Z]*') 3s = 'アリスの綴りはAliceです。' 4m = r.match(s) 5if m: 6 print('[{}],[{}]'.format(m.group(1),m.group(2))) # [アリスの綴りは],[Alice]

投稿2018/11/18 20:43

can110

総合スコア38262

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

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

0

正規表現で分割すればいいんじゃないでしょうか。

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import re 5 6a = 'Spam: text1' 7x = re.split('(\d+)', a) 8if len(x)==1: 9 print('数字は含まれていない') 10else: 11 print('数字以外') 12 for i in range(0, len(x), 2): 13 print(i,x[i]) 14 print('数字') 15 for i in range(1, len(x), 2): 16 print(i,x[i])

投稿2018/11/18 18:45

KojiDoi

総合スコア13671

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

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

TanakashiXr

2018/11/18 20:54

実際に書いてみて追記したのですが、使い方あっていますでしょうか?。。。 よろしければ教えていただきたいです。
guest

0

自己解決

bctxt = msg.text.replace("spam: ", "") match = re.search(r'\d+', bctxt) txt = re.search(r'\D+', bctxt) print(txt.group(0)) print(match.group(0)) n = int(match.group(0)) for _ in range(n): cl.sendMessage(to, (txt.group(0)))

このようなコードを書き、実際に使えました。

投稿2018/11/18 22:22

TanakashiXr

総合スコア57

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問