在重新包装中使用日语分隔符

时间:2014-04-03 16:54:41

标签: python regex

我有以下文字,想要提取'- あらたなるきぼう'和日语字符'('之间的'、'

st1='『スター・ウォーズ エピソード4/新たなる希望』( - あらたなるきぼう、Star Wars Episode IV: A New Hope)'

我使用了两种正则表达式方法来提取我想要的东西,但它们都没有。

 # -*- coding: utf-8 -*-
  import  re
  st1='『スター・ウォーズ エピソード4/新たなる希望』( - あらたなるきぼう、Sta    r Wars Episode IV: A New Hope)'
  m1 = re.search('\(([^、]*).*、.*\)',st1)
  m2 = re.search('\((.*?)、.+?\)',st1).group(1)

知道我做错了什么吗?

当然我可以先使用'、'然后'('使用拆分方法。首先,它是丑陋而不健全的,其次是由于某种原因,它不会被'('分开:

st1.split('、')[0].split('(')` 

2 个答案:

答案 0 :(得分:3)

第一个字符是:

(

这些是截然不同的字符。第一个是FULLWIDTH LEFT PARENTHESIS。第二个是正常的ascii开括号。

您必须使用具有正确unicode字符的unicode字符串才能获得匹配:

>>> st1=u'『スター・ウォーズ エピソード4/新たなる希望』( - あらたなるきぼう、Star Wars Episode IV: A New Hope)'
>>> import re
>>> re.search(u'(([^、]*).*、.*\)',st1)
<_sre.SRE_Match object at 0x103717738>

答案 1 :(得分:0)

如果您正在使用2.x,请尝试将正则表达式字符串设置为unicode-escape字符串,并使用&#39; u&#39;。由于它的正则表达式是一个很好的做法,使你的正则表达式字符串成为一个原始字符串,用&#39; r&#39;。此外,将整个模式放在括号中是多余的。

参考docans