我有一个包含100k +行的文本文件,这里是一个代码段:
:name ()
:services_adtr (
: (ReferenceObject
:Name (Any)
:Table (globals)
:Uid (97AEB369-9AEA-11D5-BD16-0090272CCNVF)
:src (
:AdminInfo (
:chkpf_uid (ED8E5AB3-C793-42B0-AB9F-FFEFABDE4BxxA)
:ClassName (translate_hide)
)
: (ReferenceObject
:Name (h-10.140.20.20)
:Table (network_objects)
:Uid (37C4D635-C2F8-1644-9B2C-A09CD477777)
)
:adtr_method (adtr_method_hide)
对于每个以“:src”开头的部分,我需要在“:Name”之后提取括号中的所有内容,所以在这种情况下,我怎么能写一个正则表达式给我“h-10.140.20.20?这里是我到目前为止尝试过的正则表达式,都返回一个空列表。请注意,本文档中还有其他部分以“src_”“src-”开头 - 我需要帮助那些以“src”开头的部分..Thanks
import re
with open("INT-NAT.txt", "r") as f:
text = f.read()
source = re.findall(r'src\s+.*:Name\s+[\(](.*)', text) and
source = re.findall(r'src\s+.*\s+[\:].*\s+[\(].*[\)]\s+[\:].*\s+[\(].*[\)]\s+[\)\\s+[\:]\s+[\(].*\s+[\:]Name\s+[\(](.*)', text)
print(source)
答案 0 :(得分:0)
我只是逐行扫描文件,剥离每一行,然后检查它是否以:Name
开头,并切断了parens中的内容。
以上几乎可以翻译成Python;试着这样做。
答案 1 :(得分:0)
只要所有行与您提供的行类似,此解决方案就会起作用:
import re
p = re.compile(r':src_adtr_translate.*ReferenceObject\W+:Name \(([^\)]*)\)')
with open('file.txt', 'r') as f:
for line in f.readlines():
results = p.findall(line)
print(results[-1])
此代码的输出包含您提供的行的文件:
h-10.140.20.20
只要您要查找的:Name
值最后出现,这就足够了。