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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

9605閲覧

正規表現で部分一致に名前を付けて取り出そうとするとエラーが返る

Casablanca_mtg

総合スコア209

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/02/07 07:23

おせわになります。
正規表現で部分一致に名前を付けて取り出そうとするとエラーが返り、後が続きません

import re
pattern = re.compile('(?P<first_name>[a-z]+)

File "<stdin>", line 1
pattern = re.compile('(?P<first_name>[a-z]+)
^
SyntaxError: EOL while scanning string literal

result = pattern.search('John Lennon')
result.group('first_name')

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

このようになります。コードが間違っているのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

SyntaxError: EOL while scanning string literal

文字列定数が閉じられてない(最後のシングルクオート文字がない)というエラーですね。
ついでにcompleの引数の閉じ括弧もないのかな?

pattern = re.compile('(?P<first_name>[a-z]+)')

のようにすれば動きますよ。
ちなみに大文字が一致しない正規表現なので結果は
ohn
になります。

投稿2017/02/07 07:35

KSwordOfHaste

総合スコア18394

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

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

Casablanca_mtg

2017/02/07 08:08

ありがとうございます。pattern = re.compile('(?P<first_name>[a-z]+’) →pattern = re.compile('(?P<first_name>[a-z]+) ’)でなければつじつまが合いませんね。ちなみに上記のようにしたら >>> pattrn = re.compile(' (?P<first_name>[a-z]+') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\mtg-1\Anaconda2\lib\re.py", line 194, in compile return _compile(pattern, flags) File "C:\Users\mtg-1\Anaconda2\lib\re.py", line 251, in _compile raise error, v # invalid expression sre_constants.error: unbalanced parenthesisこのようになりこんがらかってしまいました。 書籍ばかりに気を取られすぎて間違いに気が付くようにならなければなりませんね ありがとうございました
Casablanca_mtg

2017/02/07 08:24

ちなみにJohnという文字を得るにはどのようにすればよいのでしょうか?
Casablanca_mtg

2017/02/07 08:30

すみません。理解できました >>> pattrn = re.compile(' (?P<first_name>[a-zA-Z]+)’)でOKですね Johnと表示されました。ありがとうございます
Casablanca_mtg

2017/02/07 08:43

ただし >>>result.group('last_name') Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: no such group と表示されLennonは表示されません
Casablanca_mtg

2017/02/08 00:06

すみません。改めてお教えください 書籍では下記のようになっております >>> import re >>> pattern = re.compile('(/P<first_name>[a-z]+) 取り合えず書籍通りです (?P<last_name>[a-z]+)’, re.l) >>>result = pattern.search('John Lennon') >>>result.group('first_name') 'John' >>>result.group('last_name') 'Lennon' **************************下記はまだ進められておりません >>>result.groupdict() {'first_name': 'John', 'last_name': 'Lennon'} >>>result.groups() ('John', 'Lennon') 以上上記のように書かれています。これが正しいとは思えないのですが ご指導ください。よろしくお願いいたします
Casablanca_mtg

2017/02/08 00:57

わかりました。解決できました >>> pattern = re.compile('(/P<first_name>[a-z]+) (?P<last_name>[a-z]+)’, re.l) ここまでが一つのブロックでした。書籍では文字色が違っていたため理解ができませんでした。ありがとうございました
KSwordOfHaste

2017/02/08 03:29

compileに第二引数があったのですね。解決されたようでなによりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問