首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python regex可以在regex101上运行,但不能在python2上运行

python regex可以在regex101上运行,但不能在python2上运行
EN

Stack Overflow用户
提问于 2017-03-07 08:37:41
回答 1查看 263关注 0票数 2

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

我的正则表达式位于https://regex101.com/r/rBJHDG,它在正则表达式上工作完美,但是这个正则表达式在python2中不起作用。

例如,字符串亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4正则表达式在expect中不匹配亿万 as name_chs,而是匹配亿万.Billions as name_en

代码语言:javascript
复制
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'}

第二个问题:

如何在name_en中删除中文名称和英文名称之间的.

代码语言:javascript
复制
# 亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4
Full match  0-18    `亿万.Billions.S01E01`
Group `name_chs`    0-2 `亿万`
Group `name_en` 2-11    `.Billions`   <---- This DOT!
Group `season`  13-15   `01`
Group `episode` 16-18   `01`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 09:52:13

看起来问题在于正则表达式测试器包含globalmultiline标志,但您的代码没有。如果您在regex测试程序中取消选中这两个标志,您会发现该测试程序与您当前的结果相匹配。

你可以试试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})', re.MULTILINE)

代码语言:javascript
复制
re.search(r, u'亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4').grou
    ...: pdict()

至于你的第二个问题:

我只是通过在英文名称前面添加(.)来使那个点成为它自己的捕获组,就像这样……

代码语言:javascript
复制
^(?P<name_chs>(?:[\u3007\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]+)(?=\.))?(.)(?P<name_en>\S+).S(?P<season>\d{2})E(?P<episode>\d{2})

现在,当您打印英文名称时,它将只是一个单词,因为点在它自己的捕获组中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42638164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档