こんにちは。以下でどうでしょう?
python3
1import re
2
3
4msg = '''[名前]
5鈴木太郎
6電話: 08099999999
7[住所]
8東京都
9[電話番号]
1008012345678
11[備考]
12あいうえお'''
13
14
15tels = re.findall(u"^([電話番号]|電話)(?::?\s+)([0-9]+)", msg, flags=re.MULTILINE)
16
17for tag, value in tels:
18 print(f'{tag},{value}')
19
上記では、変数 msg
に入ってくる、処理対象のテキスト全体を、ご質問の内容から想像して書いているので、実際のものと相違があれば、コメントからお知らせください。
追記
?::? はどういう意味になるのでしょうか??
?::?
の先頭2文字の ?:
はキャプチャしないグループ(Non-Capturing Groups)です。 3文字目以降の:?
は、コロン:
の1文字が有るまたは無い、の意味です。
?::?
の先頭2文字を除去して、単に :?
として、以下
python3
1tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
のようにすると、 (:?\s+)
もキャプチャされるので、
python3
1tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
によって取得される tels
の内容は以下になります。
[('電話', ': ', '08099999999'), ('[電話番号]', '\n', '08012345678')]
上記の結果として得られるリストtels
の要素であるタプルの2番目の要素に、(:?\s+)
にマッチした部分が入ってきますが、これをキャプチャしてこなくてもよい場合に、?:
を付加した
python3
1tels = re.findall(u"^([電話番号]|電話)(?::?\s+)([0-9]+)", msg, flags=re.MULTILINE)
とすると、tels
の内容は以下になり、タプルの2番目の要素に、(コロンを含むときもある)空白文字の連続は、入ってこなくなります。
[('電話', '08099999999'), ('[電話番号]', '08012345678')]
上記の、サンプル#2 と サンプル#3の結果の違いが、キャプチャしないグループ ?:
の効果ですが、今あらためて見返すと、そもそもグループにしなければよかったので、以下で済みました。
python3
1tels = re.findall(u"^([電話番号]|電話):?\s+([0-9]+)", msg, flags=re.MULTILINE)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/06 04:57
2020/03/06 05:51