python正则表达式在regex101上工作,但在python2中不工作

python正则表达式在regex101上工作,但在python2中不工作,python,regex,Python,Regex,我创建了一个正则表达式来匹配电视节目的中英文名称 我的正则表达式位于,它在正则表达式上工作得非常完美,但是这个正则表达式在python2中不工作 例如,string亿万.十亿美元。S01E01。中英字幕.HDTVrip.1024X576.mp4 正则表达式不匹配亿万作为expect中的name\u chs,而与亿万.数十亿美元作为name\u en In [68]: r = '^(?P<name_chs>(?:[\\u3007\\u4e00-\\u9fff\\u3400-\\u4db

我创建了一个正则表达式来匹配电视节目的中英文名称

我的正则表达式位于,它在正则表达式上工作得非常完美,但是这个正则表达式在python2中不工作

例如,string
亿万.十亿美元。S01E01。中英字幕.HDTVrip.1024X576.mp4
正则表达式不匹配
亿万作为expect中的
name\u chs
,而与
亿万.数十亿美元
作为
name\u en

In [68]: r = '^(?P<name_chs>(?:[\\u3007\\u4e00-\\u9fff\\u3400-\\u4dbf\\uf900-\\ufaff]+)(?=\\.))?(?P<name_en>\\S+).S(?P<season>\\d{2})E(?P<episode>\\d{2})'

In [69]: re.match(r, u'亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4').grou
    ...: pdict()
Out[69]:
{'episode': u'01',
 'name_chs': None,
 'name_en': u'\u4ebf\u4e07.Billions',
 'season': u'01'}

问题似乎在于正则表达式测试仪包含了
全局
多行
标志,但您的代码没有。如果您在regex测试仪中取消选中这两个标志,您将发现测试仪与您当前的结果相匹配

您可以尝试
r='^(?p(?:[\\u3007\\u4e00-\\u9fff\\u3400-\\u4dbf\\uf900-\\ufaff]+)(?=\\)?(?p\\S+).S(?p\\d{2})E(?p\\d{2}),re.MULTILINE)

关于你的第二个问题:

我会在英文名字前面加上
(.)
,让那个点成为自己的捕获组,就像这样

^(?P<name_chs>(?:[\u3007\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]+)(?=\.))?(.)(?P<name_en>\S+).S(?P<season>\d{2})E(?P<episode>\d{2})
^(?P(?:[\u3007\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]+)(?=\)?((?P\S+).S(?P\d{2})E(?P\d{2})
现在,当您打印英文名称时,它将仅为单词,因为点位于它自己的捕获组中

re.search(r, u'亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4').grou
    ...: pdict()
^(?P<name_chs>(?:[\u3007\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]+)(?=\.))?(.)(?P<name_en>\S+).S(?P<season>\d{2})E(?P<episode>\d{2})