检测仅包含数字、字母和一个或多个问号的字符串

Bet*_*ish 4 python regex mysql

我正在编写一个 python 正则表达式,它仅匹配由字母、数字和一个或多个问号组成的字符串。

例如,regex1: ^[A-Za-z0-9?]+$返回带或不带的字符串?

我想要一个 regex2 匹配诸如ABC123?A, 1AB?CA?, ?2ABCD, ???, 123?但不在ABC123, ABC.?1D1, ABC(a)?1d mysql 上的表达式,我这样做了并且它有效:

select *
from (
select * from norm_prod.skill_patterns
where pattern REGEXP '^[A-Za-z0-9?]+$') AS XXX
where XXX.pattern not REGEXP '^[A-Za-z0-9]+$'
Run Code Online (Sandbox Code Playgroud)

Rob*_*Mop 6

像这样的事情怎么样:

^(?=.*\?)[a-zA-Z0-9\?]+$
Run Code Online (Sandbox Code Playgroud)

正如您在 regex101.com 上看到的

解释

(?=.*\?)是一个正向前瞻,它告诉正则表达式匹配的开始后面应该跟有 0 个或多个字符,然后是 - 即,匹配中?应该有一个。 匹配字符类 ie 中给定的字符、来自 的数字以及问号的一次或多次出现。?
[a-zA-Z0-9\?]+a-zA-Z0-9?

总而言之,正则表达式首先检查要匹配的字符串中的某个位置是否有问号。如果是,则与上面提到的字符匹配。如果?不存在,或者存在一些外来字符,则该字符串不匹配。

  • 我认为你不需要在括号内转义“?”。我们只转义这 4 个字符 `^, -, ], \` (3认同)