正则表达式中对Unicode的更正

时间:2019-01-23 13:25:59

标签: regex python-3.x

我需要有关正则表达式的帮助。我的正则表达式无法产生预期的结果。下面是我的代码:

import re
text='<u+0001f48e> repairs <u+0001f6e0><u+fe0f>your loved<u+2764><u+fe0f>one 
on the spot<u+26a1>'
regex=re.compile(r'[<u+\w+]+>')
txt=regex.findall(text)
print(txt)

输出

['<u+0001f48e>', '<u+0001f6e0>', '<u+fe0f>', 'loved<u+2764>', '<u+fe0f>', 'spot<u+26a1>']

我知道,正则表达式不正确。我希望输出为:

 '<u+0001f48e>', '<u+0001f6e0><u+fe0f>', '<u+2764><u+fe0f>', '<u+26a1>'

2 个答案:

答案 0 :(得分:1)

import re

regex = re.compile(r'<u\+[0-9a-f]+>')
text = '<u+0001f48e> repairs <u+0001f6e0><u+fe0f>your loved<u+2764><u+fe0f>one on the spot<u+26a1>'

print(regex.findall(text))

# output:
['<u+0001f48e>', '<u+0001f6e0>', '<u+fe0f>', '<u+2764>', '<u+fe0f>', '<u+26a1>']

那不是您想要的,但是几乎就在那。

现在,为了实现您的期望,我们使正则表达式更加渴望:

import re

regex = re.compile(r'((?:<u\+[0-9a-f]+>)+)')
text = '<u+0001f48e> repairs <u+0001f6e0><u+fe0f>your loved<u+2764><u+fe0f>one on the spot<u+26a1>'

print(regex.findall(text))

# output:
['<u+0001f48e>', '<u+0001f6e0><u+fe0f>', '<u+2764><u+fe0f>', '<u+26a1>']

答案 1 :(得分:0)

为什么不添加可选的第二标签搜索:

regex=re.compile(r'<([u+\w+]+>(<u+fe0f>)?)')

这个works fine和您的示例。