从终端输出中分离字符串的一部分

Isolating parts of String from terminal output

我正在使用 Python3、Linux Mint 和 Visual Studio 代码。

我有一些代码可以读取目录并打印一些 xml 文件,如下所示:

persistence_security_dcshadow_4742.xml
Network_Service_Guest_added_to_admins_4732.xml
spoolsample_5145.xml
LM_Remote_Service02_7045.xml
DE_RDP_Tunneling_4624.xml

我正在尝试弄清楚如何编写,以便在我有 运行 这个读取脚本后只保留整数,即删除所有仅保留数字的文本。我尝试通过 import re 模块使用正则表达式,但运气不佳。

这不是最稳健的解决方案,但如果数据始终完全采用这种形式,您可以按下划线拆分,取最后一个元素,然后按小数拆分,然后取第一个元素:

>>> line = "persistence_security_dcshadow_4742.xml"
>>> line.split("_")[-1].split(".")[0]
'4742'

然后,如果你需要它作为一个数字,你只需要使用int解析它。

除非您知道数据是干净的,否则您可能想要添加一些错误处理。

[0-9]

中使用正则表达式
import re

regex = r'[0-9]+'

xmls = [
    'persistence_security_dcshadow_4742.xml',
    'Network_Service_Guest_added_to_admins_4732.xml',
    'spoolsample_5145.xml',
    'LM_Remote_Service02_7045.xml',
    'DE_RDP_Tunneling_4624.xml',
]

for xml in xmls:
    matches = re.findall(regex, xml)
    number = matches[-1]
    print(number)
> 4742
> 4732
> 5145
> 7045
> 4624

更新

如果你想只在读取所有文件后打印数字,那么你可以创建一个函数,它接受一个 xml 个文件的列表和 returns 每个文件的相应数字

import re

def xmls_to_numbers(xmls):
    regex = r'[0-9]+'
    numbers = [ ]
    for xml in xmls:
        matches = re.findall(regex, xml)
        number = matches[-1]
        numbers.append(number)
    return numbers


xmls = [
    'persistence_security_dcshadow_4742.xml',
    'Network_Service_Guest_added_to_admins_4732.xml',
    'spoolsample_5145.xml',
    'LM_Remote_Service02_7045.xml',
    'DE_RDP_Tunneling_4624.xml',
]

print(xmls_to_numbers(xmls))

> ['4742', '4732', '5145', '7045', '4624']