簡體   English   中英

RegEX:如何在字符串之間排除並匹配重命名字符串

[英]RegEX: How to exclude between string and to match the renaming string

我做了相反的,兩個字符串之間的匹配並排除剩余的,但我不會否認第一句話。

串:

iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.11.19 = Hex-STRING: 14 CC 20 B7 F5 D1 70 4F 57 4C D3 95
iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.12.21 = Hex-STRING: 18 A6 F7 80 27 6F C4 E9 84 A8 B9 B1 18 A6 F7 80
32 B3
iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.13.22 = Hex-STRING: 30 B5 C2 CE 55 81 C4 E9 84 BD 58 E5
iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.16.25 = Hex-STRING: 18 A6 F7 65 A5 75 C4 E9 84 CB CC 61 B0 4E 26 8B
4E E5 B0 4E 26 8B 41 E7 84 16 F9 92 EA CB C4 E9
84 A8 C1 3D
iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.17.29 = Hex-STRING: 70 4F 57 4C CB FF 70 4F 57 39 5E 33
iso.3.6.1.4.1.25355.3.2.6.4.2.5.1.7.3.2.18.38 = Hex-STRING: 98 DE D0 D3 4E 7D 18 A6 F7 80 3D 41 84 16 F9 AF
E2 AF 9C 6F 52 12 08 A7

RegEX : (?=iso)(.*)(?<=:)

結果:匹配iso... STRING: . 我想匹配所有十六進制地址。

你可以用

import re

s = "YOUR_DATA"
results = []
for match in re.findall(r'Hex-STRING:(?:\s+[\dA-Fa-f]{2})+', s):
    results.append([" ".join(x.split()) for x in re.findall(r'[\dA-Fa-f]{2}(?:\s+[\dA-Fa-f]{2}){5}', match)])
print(results)

輸出:

[['14 CC 20 B7 F5 D1', '70 4F 57 4C D3 95'], ['18 A6 F7 80 27 6F', 'C4 E9 84 A8 B9 B1', '18 A6 F7 80 32 B3'], ['30 B5 C2 CE 55 81', 'C4 E9 84 BD 58 E5'], ['18 A6 F7 65 A5 75', 'C4 E9 84 CB CC 61', 'B0 4E 26 8B 4E E5', 'B0 4E 26 8B 41 E7', '84 16 F9 92 EA CB', 'C4 E9 84 A8 C1 3D'], ['70 4F 57 4C CB FF', '70 4F 57 39 5E 33'], ['98 DE D0 D3 4E 7D', '18 A6 F7 80 3D 41', '84 16 F9 AF E2 AF', '9C 6F 52 12 08 A7']]

請參閱Python演示

Hex-STRING:(?:\\s+[\\dA-Fa-f]{2})+模式將匹配Hex-STRING:然后重復1次或更多次1+個空格,然后是2個十六進制字符,多次可能。 這些匹配將作為第二個正則表達式的輸入, [\\dA-Fa-f]{2}(?:\\s+[\\dA-Fa-f]{2}){5} ,這將提取所有預期結果從那些預先提取的字符串。

[\\dA-Fa-f]{2}(?:\\s+[\\dA-Fa-f]{2}){5}模式匹配兩個帶有[\\dA-Fa-f]{2}十六進制字符和(?:\\s+[\\dA-Fa-f]{2}){5}匹配連續五次出現1+個空格,后跟兩個十六進制字符。

[" ".join(x.split()) for x in re.findall(...)][" ".join(x.split()) for x in re.findall(...)]列表[" ".join(x.split()) for x in re.findall(...)]有助於用單個空格替換十六進制對之間的換行符。

如果您只是嘗試匹配每行末尾的十六進制值,那么這樣就足夠了:

Hex-STRING:\\s*(.*)$

這將匹配Hex-STRING后跟任何空格,然后捕獲所有內容直到行尾。

以下是使用您提供的輸入的示例: https//regex101.com/r/1TKKcf/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM