regex - sort by substring in a list- Python -
i got text file containing lines separated in manner:
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: * i've written small script in python string after "matched paramater: " , output file, results not sorted properly.
the script:
import re pattern = "^matched parameter: ([^\s]+)" new_file = [] open(".\params.txt") txtfile: lines = txtfile.readlines() line in lines: match = re.search(pattern, line) if match: new_line = match.group() new_line = new_line.split(" ") del new_line[0], new_line[0] new_line = sorted(new_line) print(new_line) output:
['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'] i need output sorted it's parameter name substring in alphabetical order, example 'alarmsuserfilters' before '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'] any how in best possible way?, need generic possible, i.e there different strings need sorted way('ct100' etc.. 1 example)
thanks!
as others have pointed out, problem you're building list of length 1, sorting printing before reading whole file. i've changed code this:
import re pattern = "matched parameter: ([^\s]*)" parameters = [] open(".\\params.txt") txtfile: line in txtfile: match = re.match(pattern, line) if match: parameters.append(match.group(1)) par in sorted(parameters): print(par) it should work fine. has changed other bits , pieces bit - match.group(1) gets matched group, bit in parentheses () in regex. also, want match start of line, can use re.match. i'm iterating on lines of file directly, rather building lines , iterating on those. note correct in entirely possible use sort , sorted on list of strings, python compares them 'alphabetically', called 'lexicographically'.
unfortunately might struggle provide meaningful sample output without spending ages reconstructing input, don't have access it.
Comments
Post a Comment