我有以下的正则表达式:如何匹配4个字符长的术语,它包含0个或多个字母和至少1号
codes = re.findall(r"\">([a-zA-Z0-9]{4}) ", source_code)
这将返回一个由数字或字母的任意4个字符方面然而,我只想返回至少包含一个数字的条款。有人能告诉我我应该使用的代码吗?
我有以下的正则表达式:如何匹配4个字符长的术语,它包含0个或多个字母和至少1号
codes = re.findall(r"\">([a-zA-Z0-9]{4}) ", source_code)
这将返回一个由数字或字母的任意4个字符方面然而,我只想返回至少包含一个数字的条款。有人能告诉我我应该使用的代码吗?
这是一个使用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))
OP表示0个或多个字母,所以你只需要向前看数字。 – CAustin
是的。我懂了。我在评论时正在编辑。 –
这似乎不起作用,我很好奇,因为在正则表达式中有两个括号。这是一个错字吗? –
使用正先行:https://regex101.com/r/mUIBGy/6 – CAustin
尝试[此](https://regex101.com/r/qpOYDu/ 1) – Gurman