首页 > 解决方案 > 如果字符串中存在模式,则匹配模式

问题描述

我正在尝试构建具有以下要求的正则表达式

  1. 图案应以字母开头a-z
  2. 可以有字符类中的任何字符[\w:-]
  3. 可以有任意数量的下划线_,但前提是:模式中它之前有一个地方。

一些有效模式的例子

你好123

你好:123

你好你好

hello:123-hello_345 # 有效模式,因为:之前的模式中有 a_

你好 1:hell_world_123

无效模式

你好_123

你好-123_world

你好_123:世界

我尝试过使用前瞻,但由于某种原因它不起作用,下面是我想出的模式

^[a-z]+[a-z0-9:-]*(?<=:)[_]*\w*- 这个模式的问题是,如果:字符串中没有任何地方,它会停止匹配整个模式,所以它有点成为:必需的模式。

我只想检查字符串中:是否存在_before :

标签: pythonregex

解决方案


您可以使用

^(?![^_:]*_)[a-z][\w:-]*$

如果前面没有and ,则(?![^_:]*_)否定前瞻将导致匹配失败。__:

请参阅正则表达式演示正则表达式图

在此处输入图像描述

细节

  • ^- 字符串的开始
  • (?![^_:]*_)- 如果有 0+ 个字符而不是紧跟在当前位置右侧的字符,则匹配失败_:_前瞻
  • [a-z]- 一个小写的 ASCII 字母
  • [\w:-]*- 0+ 字:-字符
  • $- 字符串结束。

推荐阅读