python正则表达式,用于查找至少包含一个字母的字母数字字符串

MJB*_*MJB 2 python regex python-3.x

我试图弄清楚正则表达式的语法,它将匹配4个字母数字字符,其中至少有一个字母.每个人都应该由包裹:><,但我不希望返回尖括号.

例如,当使用re.findall字符串时,>ABCD<>1234<>ABC1<>ABC2它应该返回['ABCD', 'ABC1'].

1234 - 没有信

ABC2 - 没有用尖括号包裹

anu*_*ava 5

您可以在python中使用这个基于前瞻性的正则表达式findall:

(?i)>((?=\d*[a-z])[a-z\d]{4})<
Run Code Online (Sandbox Code Playgroud)

RegEx演示

码:

>>> regex = re.compile(r">((?=\d*[a-z])[a-z\d]{4})<", re.I)
>>> s = ">ABCD<>1234<>ABC1<>ABC2"
>>> print (regex.findall(s))
['ABCD', 'ABC1']
Run Code Online (Sandbox Code Playgroud)

RegEx详细信息:

  • re.I:启用忽略大小写修饰符
  • >:匹配文字字符 >
  • (:开始捕获组
    • (?=\d*[a-z]):Lookahead断言我们在0位或更多位后至少有一个字母
    • [a-z\d]{4}:匹配4个字母数字字符
  • ):结束捕获组
  • <:匹配文字字符 <

  • @MJB:点击演示并阅读右侧.它有一个更冗长的解释.然后阅读正则表达式文档,了解没有意义的内容.这里的关键是前瞻断言`(?=\d*[az])`(lookaheads以`?=`开头).它断言关于后面的字符而不会吞噬任何字符. (2认同)