正则表达式python findall issu

2024-05-28 23:45:21 发布

您现在位置:Python中文网/ 问答频道 /正文

从测试字符串:

 test=text-AB123-12a
 test=text-AB123a

我只需要提取'AB123-12''AB123',但是:

 re.findall("[A-Z]{0,9}\d{0,5}(?:-\d{0,2}a)?", test)

退货:

['', '', '', '', '', '', '', 'AB123-12a', '']

这些多余的空位是什么?如何移除它们?你知道吗


Tags: 字符串texttestrefindall空位ab123ab123a
2条回答

模式设置为将长度为零的字符与字符集量词的下限设置为0相匹配。只需将设置为1即可生成所需的结果:

>>> import re
>>> test = ''' test=text-AB123-12a
...  test=text-AB123a'''
>>> re.findall("[A-Z]{1,9}\d{1,5}(?:-\d{0,2}a)?", test)
['AB123-12a', 'AB123']

RegEx测试器:http://www.regexpal.com/表示模式字符串[A-Z]{0,9}\d{0,5}(?:-\d{0,2}a)?可以匹配0个字符,因此匹配无限。你知道吗

再检查一下你的表情。Python提供未定义的结果。你知道吗

量词{0,n}将匹配前面模式的0到n次出现。因为您匹配的两个模式允许0次出现,而第三个模式是可选的(?),所以它将匹配0长度的字符串,即字符串中的每个字符。你知道吗

编辑以找到每个模式的最小值最大值分别为9和5,这样可以得到正确的结果:

>>> test='text-AB123-12a'
>>> import re
>>> re.findall("[A-Z]{1,9}\d{1,5}(?:-\d{0,2}a)?", test)
['AB123-12a']

如果没有进一步的细节,你匹配的字符串到底是什么样子的,我就不能给出更好的答案。你知道吗

相关问题 更多 >

    热门问题