请教各位编程大佬,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 用字符串分割实现更好吧 可以使用正则表达式实现。以下是一个使用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
可以把这段文本需要 的内容标红或标其他容易区分的颜色吗?
我来试试。
需要的内容就是每段rule name中只要存在service telnet或service ssh或service tcp_3389的,就提取对应的rule name SMRC86 发表于 2024-6-4 10:40
可以使用正则表达式实现。以下是一个使用Python的示例代码:
```python
不行啊,输出的是['SRM202307100275', 'SRM202307100275-2'] 本帖最后由 只有午安 于 2024-6-4 11:26 编辑
报意思,没有注意看要求 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)
baigei2333 发表于 2024-6-4 10:46
需要的内容就是每段rule name中只要存在service telnet或service ssh或service tcp_3389的,就提取对应的 ...
尴尬啦~~~rule name 是哪个?我不懂!
页:
[1]
2