Tôi đang tạo ra một bộ trong Python để chứa tất cả các biểu tượng trên bàn phím của tôi, nhưng rõ ràng là một vài vấn đề. Có cách nào để đưa tất cả chúng vào đó mà không gặp vấn đề gì không?
Đây là bộ của tôi:
symbols = {`,~,!,@,#,$,%,^,&,*,[,],_,-,+,=,{,[,},},|,\,:,;,",',,.,?,/}
Để khắc phục nhận xét hầu hết, vì trong Python
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
6 là để bình luận, tôi đã gửi đi mọi thứ như vậy:symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
Điều này hoạt động cho nhân vật đó, nhưng bây giờ tôi đã có thể thấy một vấn đề khi tôi bắt gặp
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
7 và symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
8. Có cách nào tốt hơn để thực hiện bộ này không? Điểm dừng không chỉ cho phép bạn nhóm biểu thức. Chuỗi phù hợp với biểu thức trong ngoặc đơn được ghi nhớ. Nó có thể được lấy riêng biệt bằng các phương pháp đặc biệt
In [7]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [8]: re.search['\S+$', line].group[] Out[8]: 'FastEthernet0/1'0 và
In [7]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [8]: re.search['\S+$', line].group[] Out[8]: 'FastEthernet0/1'1. Điều này được đề cập trong tiểu mục nhóm nhóm nhóm.
9 - Bất kỳ ký tự nào ngoại trừ ký tự dòng mớisymbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
0 - Bắt đầu dòngIn [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
1 - kết thúc dòngIn [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
2 - Bất kỳ biểu tượng nào trong ngoặc vuôngIn [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
3 - Bất kỳ biểu tượng nào ngoại trừ các biểu tượng trong ngoặc vuôngIn [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
4 - Phần tử A hoặc B-
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
5 - Biểu thức được coi là một yếu tố. Ngoài ra, chuỗi con phù hợp với một biểu thức được ghi nhớ
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
9#
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
DOT đại diện cho bất kỳ biểu tượng. Thông thường, một dấu chấm được sử dụng với các ký hiệu lặp lại
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'7 và
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'8 để chỉ ra rằng bất kỳ ký tự nào cũng có thể được tìm thấy giữa các biểu thức nhất định.
Ví dụ: sử dụng biểu thức
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'9, bạn có thể mô tả một dòng có giao diện trong đầu ra, chi tiết hàng xóm của SH SHP chi tiết:
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
Kết quả chỉ là một chuỗi vì dấu chấm đại diện cho bất kỳ ký tự nào ngoại trừ ký tự nguồn cấp đường. Ngoài ra, các ký tự lặp lại
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'7 và
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'8 bằng cách mặc định nắm bắt chuỗi dài nhất có thể. Khía cạnh này được giải quyết trong các vòng loại tham lam của tiểu mục.
In [1]: cdp = '''
...: SW1#show cdp neighbors detail
...: -------------------------
...: Device ID: SW2
...: Entry address[es]:
...: IP address: 10.1.1.2
...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP
...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1
...: Holdtime : 164 sec
...: '''
In [2]: re.search['Interface.+Port ID.+', cdp].group[]
Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
0#
Ký tự
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'0 có nghĩa là sự khởi đầu của dòng. Biểu thức
In [3]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [4]: re.search['^\d+', line].group[] Out[4]: '100'4 tương ứng với chuỗi con:
In [3]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [4]: re.search['^\d+', line].group[] Out[4]: '100'
Ký tự từ đầu dòng đến dấu hiệu [bao gồm cả pound]:
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'
In [1]: cdp = '''
...: SW1#show cdp neighbors detail
...: -------------------------
...: Device ID: SW2
...: Entry address[es]:
...: IP address: 10.1.1.2
...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP
...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1
...: Holdtime : 164 sec
...: '''
In [2]: re.search['Interface.+Port ID.+', cdp].group[]
Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'
1#
Biểu tượng
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'1 đại diện cho phần cuối của một dòng.
Biểu thức
In [3]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [4]: re.search['^\d+', line].group[] Out[4]: '100'7 mô tả bất kỳ ký tự nào ngoại trừ khoảng trắng ở cuối dòng:
In [7]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [8]: re.search['\S+$', line].group[] Out[8]: 'FastEthernet0/1'
In [3]: line = "100 aa12.35fe.a5d3 FastEthernet0/1"
In [4]: re.search['^\d+', line].group[]
Out[4]: '100'
8#
Các biểu tượng được liệt kê trong dấu ngoặc vuông có nghĩa là bất kỳ biểu tượng nào trong số này sẽ là một trận đấu. Do đó, các thanh ghi khác nhau có thể được mô tả:
In [9]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [10]: re.search['[Ff]ast', line].group[] Out[10]: 'Fast' In [11]: re.search['[Ff]ast[Ee]thernet', line].group[] Out[11]: 'FastEthernet'
Sử dụng dấu ngoặc vuông, bạn có thể chỉ định ký tự nào có thể gặp ở một vị trí cụ thể. Ví dụ, biểu thức
In [3]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [4]: re.search['^\d+', line].group[] Out[4]: '100'9 mô tả các ký tự từ đầu dòng đến dấu
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'0 hoặc
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'1 [bao gồm cả chúng]. Biểu thức này có thể được sử dụng để lấy tên của thiết bị:
In [12]: commands = ['SW1#show cdp neighbors detail', ...: 'SW1>sh ip int br', ...: 'r1-london-core# sh ip route'] ...: In [13]: for line in commands: ...: match = re.search['^.+[>#]', line] ...: if match: ...: print[match.group[]] ...: SW1# SW1> r1-london-core#
Bạn có thể chỉ định phạm vi ký tự trong ngoặc vuông. Ví dụ: bất kỳ số nào từ 0 đến 9:
In [14]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [15]: re.search['[0-9]+', line].group[] Out[15]: '100'
Letters:
In [16]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [17]: re.search['[a-z]+', line].group[] Out[17]: 'aa' In [18]: re.search['[A-Z]+', line].group[] Out[18]: 'F'
Một số phạm vi có thể được chỉ định trong ngoặc vuông:
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
0Biểu thức
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'2 mô tả ba nhóm ký hiệu được phân tách bằng một dấu chấm. Các ký tự trong mỗi nhóm có thể là các chữ cái A-F hoặc chữ số 0-9. Biểu thức này mô tả địa chỉ MAC.
Một tính năng khác của dấu ngoặc vuông là các biểu tượng đặc biệt trong dấu ngoặc vuông mất ý nghĩa đặc biệt của chúng và chỉ đơn giản là một biểu tượng. Ví dụ, một dấu chấm bên trong ngoặc vuông sẽ biểu thị một dấu chấm, không phải bất kỳ biểu tượng nào.
Biểu thức
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'3 mô tả ba nhóm ký hiệu:
chữ cái a-f hoặc chữ số 0-9
chấm hoặc chém
chữ cái a-f hoặc chữ số 0-9
chấm hoặc chém
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
1Đối với chuỗi
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'4, trận đấu sẽ là một chuỗi con như vậy:
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
2Nếu ký hiệu đầu tiên trong ngoặc vuông là
In [1]: cdp = ''' ...: SW1#show cdp neighbors detail ...: ------------------------- ...: Device ID: SW2 ...: Entry address[es]: ...: IP address: 10.1.1.2 ...: Platform: cisco WS-C2960-8TC-L, Capabilities: Switch IGMP ...: Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1 ...: Holdtime : 164 sec ...: ''' In [2]: re.search['Interface.+Port ID.+', cdp].group[] Out[2]: 'Interface: GigabitEthernet1/0/16, Port ID [outgoing port]: GigabitEthernet0/1'0, thì trận đấu sẽ là bất kỳ biểu tượng nào ngoại trừ các biểu tượng trong ngoặc.
In [5]: prompt = 'SW1#show cdp neighbors detail'
In [6]: re.search['^.+#', prompt].group[]
Out[6]: 'SW1#'
6#
Trong trường hợp này, biểu thức mô tả mọi thứ ngoại trừ các chữ cái.
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
3Biểu tượng ống hoạt động như ‘hoặc
In [5]: prompt = 'SW1#show cdp neighbors detail'
In [6]: re.search['^.+#', prompt].group[]
Out[6]: 'SW1#'
8#
Điểm dừng được sử dụng để nhóm biểu cảm. Như trong các biểu thức toán học, dấu ngoặc đơn có thể được sử dụng để chỉ ra các yếu tố nào mà hoạt động được áp dụng.
Ví dụ: Biểu thức
In [5]: prompt = 'SW1#show cdp neighbors detail' In [6]: re.search['^.+#', prompt].group[] Out[6]: 'SW1#'9 mô tả ba ký tự: chữ số, sau đó là chữ cái hoặc chữ số và chữ số:
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
4Điểm dừng cho phép chỉ ra biểu thức nào là một thực thể. Điều này đặc biệt hữu ích khi sử dụng các ký hiệu lặp lại:
symbols = {'`','~','!','@','#','$','%','^','&','*','[',']','_','-','+','=','{','[','}','}','|','\',':',';','"',''','','.','?','/'}
5Điểm dừng không chỉ cho phép bạn nhóm biểu thức. Chuỗi phù hợp với biểu thức trong ngoặc đơn được ghi nhớ. Nó có thể được lấy riêng biệt bằng các phương pháp đặc biệt
In [7]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [8]: re.search['\S+$', line].group[] Out[8]: 'FastEthernet0/1'0 và
In [7]: line = "100 aa12.35fe.a5d3 FastEthernet0/1" In [8]: re.search['\S+$', line].group[] Out[8]: 'FastEthernet0/1'1. Điều này được đề cập trong tiểu mục nhóm nhóm nhóm.