正则表达式以确保组匹配不以特定ch结尾

2024-09-28 22:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难想出一个正则表达式来匹配特定的大小写。我有四种格式的电视节目列表:

  • 在展会名称.S01E01号
  • 在展会名称.0101号
  • 在展会名称.01x01号
  • 在展会名称.101号

我想匹配的是节目名。我的主要问题是我的正则表达式与前面的“.”匹配节目名。我的正则表达式如下:

"^([0-9a-zA-Z\.]+)(S[0-9]{2}E[0-9]{2}|[0-9]{4}|[0-9]{2}x[0-9]{2}|[0-9]{3})"

一些例子:

^{pr2}$

所以问题是如何避免第一组以句点结尾?我意识到我可以简单地做到:

var.strip(".")

但是,这不适用于展会名称.0101英寸。有没有办法可以改进正则表达式来更好地处理这种情况?在

提前谢谢。在


Tags: 名称列表var格式结尾节目例子strip
3条回答

我认为这样可以:

>>> regex = re.compile(r'^([0-9a-z.]+)\.(S[0-9]{2}E[0-9]{2}|[0-9]{3,4}|[0-9]{2}x[0-9]{2})$', re.I)
>>> regex.match('Name.Of.Show.01x01').groups()
('Name.Of.Show', '01x01')
>>> regex.match('Name.Of.Show.101').groups()
('Name.Of.Show', '101')

ETA:当然,如果您只是尝试从受信任字符串中提取不同的位,则可以使用字符串方法:

^{pr2}$

最后一组的唯一真正限制是它不包含点?简单:

^(.*?)(\.[^.]+)$

这和任何东西都相配,不贪婪。重要的部分是第二组,它以一个点开始,然后匹配任何非点字符,直到字符串的末尾。在

这适用于所有测试用例。在

问题似乎是您没有指定最后一个组之前的句点是必需的,所以类似^([0-9a-zA-Z\.]+)\.(S[0-9]{2}E[0-9]{2}[0-9]{4}[0-9]{2}x[0-9]{2}[0-9]{2}[0-9]{3}。在

相关问题 更多 >