如何匹配角括号中的多个元素与python正则表达式?

时间:2014-03-09 17:22:42

标签: python regex unicode cjk

我有一些看起来像这样的字符串:

<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 个答案:

答案 0 :(得分:0)

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好得多

答案 1 :(得分:0)

>>> myre = re.compile(ur'''(?<=\(').+?(?='\)">)|(?<=「)[^」]+''', re.UNICODE)
>>> myre.findall(str)
[u'higashino/index.html', u'\u5922\u5e7b\u82b1', u'\u767d\u591c\u884c']