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

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -