Как я могу сопоставить несколько элементов, заключенных в угловые скобки, с регулярным выражением Python?

У меня есть несколько строк, которые выглядят так:

<a href="javascript:updateParent('higashino/index.html')">東野 圭吾「夢幻花」「白夜行」</a>他<br>

Теперь я хочу извлечь ссылку и строки внутри угловых скобок ("「"и"」"), вот так:

['higashino/index.html', '夢幻花', '白夜行']

Я пробовал:

import re
str = u'''<a href="javascript:updateParent('higashino/index.html')">東野 圭 吾「夢幻花」「白夜行」</a>他<br>'''
myre = re.compile(ur'''\('(.*)'\)">.*「(.*?)」.*''', re.UNICODE)
myre.findall(str)

результат:

['higashino/index.html', '白夜行']

Затем я попытался использовать шаблон\('(.*)'\)">.*「([^」]*)」.*, но результат был тот же, был найден только один элемент в угловых скобках.

Как я могу получить не один, а все элементы внутри угловых скобок? Благодарю.

2 ответа

Решение

Использование re.findall() (или же re.finditer) с регулярным выражением 「([^」]*?)」:

import re
str = '''<a href="javascript:updateParent('higashino/index.html')">東野 圭 吾「夢幻花」「白夜行」</a>他<br>'''
match = re.findall(r'「([^」]*?)」', str)
print(match)

Предоставление:

['夢幻花', '白夜行']

Использование Python 3. Кроме того, если вы еще не используете Python 3, я рекомендую сделать это, так как это лучше для строк Unicode, чем Python 2

>>> myre = re.compile(ur'''(?<=\(').+?(?='\)">)|(?<=「)[^」]+''', re.UNICODE)
>>> myre.findall(str)
[u'higashino/index.html', u'\u5922\u5e7b\u82b1', u'\u767d\u591c\u884c']
Другие вопросы по тегам