Python re findall不匹配重复项

2024-10-05 14:24:02 发布

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

假设输入是这样的。事实上它比较长,但为了清楚起见,我就这样留着。在

Valid from: Wed Mar 05 15:40:45 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034
Valid from: Fri Jan 10 08:28:29 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034

我的代码是:

 certDataArray = []
            patterns = ['Alias name:\s(.*)\n', 'Owner:\s(.*)\n', 'Issuer:\s(.*)\n', 'Serial number:\s(.*)\n', 'Valid from:\s(.*) until', 'until:\s(.*)\n']
            for pattern in patterns:
                result = re.compile(pattern)
                result = result.findall(cmd)
                certDataArray.append(result)
            certDataArray = zip(certDataArray[0],certDataArray[1],certDataArray[2],certDataArray[3],certDataArray[4],certDataArray[5])

现在,问题是findall不会匹配模式“until:\s(.*)\n”的第二个匹配项,因为已经有一个相同的匹配项。不知道我的措辞是否正确,但你明白了。在

我在谷歌上搜索解决方案,发现了2个:

1)使用新改进的python regex模块。这是不可能的,因为我没有在我的个人电脑上运行,这段代码将在企业级平台上运行。以任何方式升级python都是不可能的,我不认为我可以复制粘贴正则表达式.py进入服务器让那边的python使用它,或者我可以吗?我下载了这个软件包,似乎它需要安装,但我不能在这个系统上安装。在

(二)重复. 我一直在看,坦白说我不明白它是怎么工作的

我还试图将字符串分解成几行,并使用“for”循环遍历每一行,但这似乎是一个迟钝的方法,可能会产生严重的反作用。在

所有的想法都非常欢迎,谢谢。在


Tags: 代码fromforresultmarjanpatternspattern
1条回答
网友
1楼 · 发布于 2024-10-05 14:24:02

这并不是因为它是一个重复的匹配-第二行不以^{结尾。你真的应该使用:

  • r"raw strings"防止越狱者陷入混乱
  • 字符串标记$而不是\n;和
  • re.MULTILINE选项分别处理每一行。在

例如:

>>> s = """Valid from: Wed Mar 05 15:40:45 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034
Valid from: Fri Jan 10 08:28:29 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034"""
>>> import re
>>> re.findall(r'until:\s(.*)$', s, re.MULTILINE)
['Thu Jan 05 08:28:29 GMT+00:00 2034', 'Thu Jan 05 08:28:29 GMT+00:00 2034']

相关问题 更多 >