从终端输出中分离字符串的一部分
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']
我正在使用 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']