2017-10-10 46 views
0

我有以下的正则表达式:如何匹配4个字符长的术语,它包含0个或多个字母和至少1号

codes = re.findall(r"\">([a-zA-Z0-9]{4}) ", source_code) 

这将返回一个由数字或字母的任意4个字符方面然而,我只想返回至少包含一个数字的条款。有人能告诉我我应该使用的代码吗?

+0

使用正先行:https://regex101.com/r/mUIBGy/6 – CAustin

+0

尝试[此](https://regex101.com/r/qpOYDu/ 1) – Gurman

回答

0

这是一个使用Positive Lookahead

\">(?=.*\d)([a-zA-Z\d]{4}) 

测试用例在regex101

但是,更容易理解的方法是,您可以先用当前的正则表达式捕获,然后使用\d+正则表达式检查结果是否至少包含1个数字。

可运行Python程序here

import re 

regex = r"\">(?=.*\d)([a-zA-Z\d]{4})" 

test_str = ("\">abcda\n" 
    "\">1111a\n" 
    "\">ab1da\n" 
    "\">abc2a\n" 
    "\">3bcda\n" 
    "\">a2cda") 

matches = re.finditer(regex, test_str) 

for matchNum, match in enumerate(matches): 
    print (match.group(1)) 
+0

OP表示0个或多个字母,所以你只需要向前看数字。 – CAustin

+0

是的。我懂了。我在评论时正在编辑。 –

+0

这似乎不起作用,我很好奇,因为在正则表达式中有两个括号。这是一个错字吗? –

相关问题