我正在使用python和pexpect从某些cisco设备中收集一些信息,并且在RE上成功地提取了讨厌的小物件。恐怕我已经撞墙了。一些开关堆叠在一起,我已经在脚本中确定了这一点,并使用了一个单独的例程来解析数据。如果将交换机堆叠在一起,则会看到以下内容(从推杆输出中提取)
Top Assembly Part Number : 800-25858-06
Top Assembly Revision Number : A0
Version ID : V08
CLEI Code Number : COMDE10BRA
Hardware Board Revision Number : 0x01
Switch Ports Model SW Version SW Image
------ ----- ----- ---------- ----------
* 1 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
2 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
3 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
4 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
Switch 02
---------
Switch Uptime : 11 weeks, 2 days, 16 hours, 27 minutes
Base ethernet MAC Address : 00:26:52:96:2A:80
Motherboard assembly number : 73-9675-15
当我遇到此问题时,我需要提取4表中每个开关的编号和型号(sw可以忽略,但是可以有1到9个开关)这是多行事物使我如愿以偿其余一切都很好。有什么想法吗?
好的,抱歉。我的正则表达式只是开始查看最后一组-直到..然后我无法去哪里工作!
-{10] \ s- {10}(。+)开关
模型将更改,开关数量将更改,在此示例中,我需要捕获4行,分别是
* 1 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
2 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
3 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
4 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
但是每个开关可能是不同的型号,可能在1到9之间。对于这个示例,理想情况下,我希望得到
*,1,WS-C3750-48P
,2,WS-C3750-48P
,3,WS-C3750-48P
,4,WS-C3750-48P
(星号表示掌握),
但掌握这些内容将使我走上正确的轨道
x="""Top Assembly Part Number : 800-25858-06
Top Assembly Revision Number : A0
Version ID : V08
CLEI Code Number : COMDE10BRA
Hardware Board Revision Number : 0x01
Switch Ports Model SW Version SW Image
------ ----- ----- ---------- ----------
* 1 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
2 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
3 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
4 52 WS-C3750-48P 12.2(35)SE5 C3750-IPBASE-M
Switch 02
---------
Switch Uptime : 11 weeks, 2 days, 16 hours, 27 minutes
Base ethernet MAC Address : 00:26:52:96:2A:80
Motherboard assembly number : 73-9675-15"""
>>> import re
>>> re.findall("^\*?\s*(\d)\s*\d+\s*([A-Z\d-]+)",x,re.MULTILINE)
[('1', 'WS-C3750-48P'), ('2', 'WS-C3750-48P'), ('3', 'WS-C3750-48P'), ('4', 'WS-C3750-48P')]
更新 :因为OP编辑了问题,感谢汤姆指出+
>>> re.findall("^(\*?)\s+(\d)\s+\d+\s+([A-Z\d-]+)",x,re.MULTILINE)
[('*', '1', 'WS-C3750-48P'), ('', '2', 'WS-C3750-48P'), ('', '3', 'WS-C3750-48P'), ('', '4', 'WS-C3750-48P')]
>>>
如何提取所有字符(包括换行符),直到第一次出现单词序列?例如以下输入: 输入文本: 和序列我想从中提取文本到第二行中第一次出现的。 输出必须为- 我整个上午都在努力。我可以编写表达式来提取所有字符,直到遇到特定字符,但如果我使用这样的表达式: 跨换行符不匹配。
问题内容: 我有一个最初用于python的正则表达式,用于从抓取的HTML页面提取2个字符串: 这在Python中可以正常工作,但在Objective-C / Swift中则不能。 这是我用来查找结果的Swift 2.0代码: 这是在HTML内部检查JS的示例,如下所示: 问题答案: 从您的反馈中,我看到您只需要告诉正则表达式引擎将换行符与句点匹配即可。 使用选项: 允许匹配任何字符,包括行分隔符
问题内容: 我对多行字符串的replaceAll有问题: 以上适用于testWorks,但不适用于testIllegal !?为什么会这样,我该如何克服呢?我需要替换跨越多行的注释/ * … * /。 问题答案: 您需要使用标志来表示点应与换行符匹配。例如 或者使用例如在模式中指定标志
问题内容: 假设我想要一个正则表达式,使其与“从iPhone发送”和“从iPod发送”都匹配。我该如何写这样的表达? 我尝试过类似的事情: 但似乎不起作用。 问题答案:
问题内容: 我试图在Python 2.7.2中使用正则表达式从字符串中提取所有出现的带标记单词。或者简单地说,我想提取标签内的所有文本。这是我的尝试: 印刷产品 要获取的正确正则表达式是: 或。 谢谢。:) 问题答案: 产量 regex与unicode完全相同,但难于阅读。 第一个括号组告诉重新任何列表中的字符应匹配,并且同样与第二组括号。那你想什么都不要。所以, 卸下外围的方括号。(也除去杂散前
问题内容: 我正在尝试抓取“ ”标记后的所有内容并将其删除,但是我的代码似乎没有执行任何操作。难道不支持正则表达式? 问题答案: 否。Python中的正则表达式由模块处理。 一般来说: