baigei2333 发表于 2024-6-4 10:22

请教各位编程大佬,Python正则匹配文本问题

各位大佬好,本人python小白,有一个问题想请教各位大佬。如下示例文本,我想找到每条rule name中存在service telnet或service ssh或service tcp_3389的,记录下rule name名字写入excel文件中,请问用正则表达式可以实现吗??如果用textfsm可以很容易实现,但是因为环境问题,不方便安装其他包,
<GD0H3FW10-WW01>display security-policy ip
Security-policy ip

rule 37 name SRM202307100275
action pass
disable
logging enable
counting enable
description 护网临时限制
source-zone Trust
destination-zone Untrust
source-ip Net_192.168.232.0
destination-ip 3.1.1.1
service tcp_3389

rule 38 name SRM202307100275-2
action drop
disable
logging enable
counting enable
description 限制非 sjyh01用户访问
source-zone Trust
destination-zone Untrust
destination-ip 1.1.2.1
service icmp_any
service tcp_20060

rule 36 name cy_test
action pass
disable
logging enable
counting enable
source-zone Trust
destination-zone Untrust
source-ip ip_192.168.232.214
service http
service ssh
service icmp_any

知心 发表于 2024-6-4 10:37

用字符串分割实现更好吧

SMRC86 发表于 2024-6-4 10:40

可以使用正则表达式实现。以下是一个使用Python的示例代码:

```python
import re

text = '''
rule 37 name SRM202307100275
action pass
disable
logging enable
counting enable
description 护网临时限制
source-zone Trust
destination-zone Untrust
source-ip Net_192.168.232.0
destination-ip 3.1.1.1
service tcp_3389

rule 38 name SRM202307100275-2
action drop
disable
logging enable
counting enable
description 限制非 sjyh01用户访问
source-zone Trust
destination-zone Untrust
destination-ip 1.1.2.1
service icmp_any
service tcp_20060

rule 36 name cy_test
action pass
disable
logging enable
counting enable
source-zone Trust
destination-zone Untrust
source-ip ip_192.168.232.214
service http
service ssh
service icmp_any
'''

pattern = r'rule \d+ name (\S+).*?(service (telnet|ssh|tcp_3389))'
matches = re.findall(pattern, text, re.DOTALL)

result = for match in matches]
print(result)
```

这段代码会输出:

```
['SRM202307100275', 'cy_test']
```

接下来,你可以将结果写入Excel文件中。

wapjsx 发表于 2024-6-4 10:44

可以把这段文本需要 的内容标红或标其他容易区分的颜色吗?

我来试试。

baigei2333 发表于 2024-6-4 10:46

wapjsx 发表于 2024-6-4 10:44
可以把这段文本需要 的内容标红或标其他容易区分的颜色吗?

我来试试。

需要的内容就是每段rule name中只要存在service telnet或service ssh或service tcp_3389的,就提取对应的rule name

baigei2333 发表于 2024-6-4 10:48

SMRC86 发表于 2024-6-4 10:40
可以使用正则表达式实现。以下是一个使用Python的示例代码:

```python


不行啊,输出的是['SRM202307100275', 'SRM202307100275-2']

只有午安 发表于 2024-6-4 11:08

本帖最后由 只有午安 于 2024-6-4 11:26 编辑

报意思,没有注意看要求

SMRC86 发表于 2024-6-4 11:08

baigei2333 发表于 2024-6-4 10:48
不行啊,输出的是['SRM202307100275', 'SRM202307100275-2']

试试这个呢,我身边没有电脑,只能大概判断了




import re

text = """<GD0H3FW10-WW01>display security-policy ip
Security-policy ip

rule 37 name SRM202307100275
action pass
disable
logging enable
counting enable
description 护网临时限制
source-zone Trust
destination-zone Untrust
source-ip Net_192.168.232.0
destination-ip 3.1.1.1
service tcp_3389

rule 38 name SRM202307100275-2
action drop
disable
logging enable
counting enable
description 限制非 sjyh01用户访问
source-zone Trust
destination-zone Untrust
destination-ip 1.1.2.1
service icmp_any
service tcp_20060

rule 36 name cy_test
action pass
disable
logging enable
counting enable
source-zone Trust
destination-zone Untrust
source-ip ip_192.168.232.214
service http
service ssh
service icmp_any"""

rule_names = re.findall(r"rule \d+ name ([^\n]+)(?=\naction)", text)
filtered_rule_names =

print(filtered_rule_names)

wapjsx 发表于 2024-6-4 11:15

baigei2333 发表于 2024-6-4 10:46
需要的内容就是每段rule name中只要存在service telnet或service ssh或service tcp_3389的,就提取对应的 ...

尴尬啦~~~rule name 是哪个?我不懂!

捷豹网络丶贱仔 发表于 2024-6-4 11:21

页: [1] 2
查看完整版本: 请教各位编程大佬,Python正则匹配文本问题