按列表Python中的子字符串排序

2024-09-30 12:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个文本文件,其中包含以这种方式分隔的行:

Action: Add Parameter
Matched Parameter: ctl00_ContentPlaceHolderMain_RadSearchBoxNeId_ClientState 
on [HTTPS] /ConsolePage/ConsolePageWeb.aspx Matched Wildcard: * 

Action: Add Parameter
Matched Parameter: ctl00$ContentPlaceHolderMain$HiddenFieldSelectedFilter on 
[HTTPS] /ConsolePage/ConsolePageWeb.aspx Matched Wildcard: * 

我用Python编写了一个小脚本,只获取“Matched Paramater:”后面的字符串并将其输出到一个文件中,但是结果没有正确排序。在

剧本:

^{pr2}$

输出:

['ctl00_MainSplitter_ClientState']
['ctl00_RadWindowLicenseAggreemennt_C_RadButtonLicenseAggreemenntCancel_ClientState']
['ctl00_RadWindowLicenseAggreemennt_C_RadButtonLicenseAggreemenntOK_ClientState']
['ctl00_RadWindowLicenseAggreemennt_ClientState']
['ctl00$ScriptManagerMain']
['ctl00_RadStyleSheetManager1_TSSM']
['ctl00_ScriptManagerMain_TSM']
['__VIEWSTATE']
['ctl00_radwindow1_ClientState']
['ctl00_RadButtonLgout_ClientState']
['ctl00_TopPane_ClientState']
['ctl00_RadPanelBarMainMenu_ClientState']
['ctl00_LeftPane_ClientState']
['ctl00_ContentPlaceHolderMain_RadWindowManager1_ClientState']
['ctl00$ContentPlaceHolderMain$RadComboBoxTimeResolution']
['ctl00_ContentPlaceHolderMain_RadComboBoxTimeResolution_ClientState']
['ctl00_ContentPlaceHolderMain_RadSearchBoxNeId']
['ctl00_ContentPlaceHolderMain_RadSearchBoxNeId_ClientState']
['ctl00$ContentPlaceHolderMain$HiddenFieldSelectedFilter']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadButtonAlarmsFilterClose_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxRuleNames_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxSeverity_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxStatus_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxEntityType_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadButtonAlarmsFilterOK_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowFiltersList_C_RadButtonFiltersListClose_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowFiltersList_C_RadListBoxExistingFilters_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowFiltersList_C_RadButtonFiltersListOk_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowFiltersList_C_RadButtonFiltersListEdit_ClientState']

我需要输出按它的参数名子字符串按字母顺序排序,例如'AlarmsUserFilters'在'ClientState'之前:

['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadButtonAlarmsFilterClose_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxRuleNames_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxSeverity_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxStatus_ClientState']
['ctl00_ContentPlaceHolderMain_AlarmsUserFilters_RadWindowAlarmsFilter_C_RadListBoxEntityType_ClientState']
['ctl00_MainSplitter_ClientState']

有什么帮助吗?怎样才能做到最好?,我需要尽可能通用,即可能有不同的字符串需要这样排序('ct100'等)。。只是一个例子)

谢谢!在


Tags: 字符串addparameter排序onactionmatchedctl00
1条回答
网友
1楼 · 发布于 2024-09-30 12:20:57

正如其他人所指出的,问题在于,您只构建了一个长度为1的列表,对其进行排序,然后在读取整个文件之前立即将其打印出来。我把你的代码改成了:

import re

pattern = "Matched Parameter: ([^\s]*)"
parameters = []

with open(".\\params.txt") as txtFile:
    for line in txtFile:
        match = re.match(pattern, line)
        if match:
            parameters.append(match.group(1))

for par in sorted(parameters):
    print(par)

现在应该可以正常工作了。这也改变了其他一些位和片段-match.group(1)只会立即得到匹配的组,即正则表达式中括号()中的位。另外,由于您只想从行首开始匹配,所以可以使用re.match。我还直接迭代文件的行,而不是建立行然后迭代这些行。请注意,您是正确的,因为在一个字符串列表中使用sort和{}是完全可能的,因为Python将它们“按字母顺序”进行比较,这通常称为“字典式”。在

不幸的是,我可能很难提供任何有意义的示例输出,而不需要花费大量时间重新构建输入,因为我无法访问它。在

相关问题 更多 >

    热门问题