If you're willing to do some alteration to the format you list sources in, you can do some filtering - if you name all class features with the level of the feature and then the name of the class in single brackets, such as 1 [fighter], and for all non-class features, have the number as 0, the rest of the source in single brackets.
This will allow you to do this kind of thing:
/w "@{character_name}"&{template:default} {{name=Level ?{level} feature(s)
[ ](#" hidden null=)}} {{[0](#" hidden)=
[ ](#" hidden null=)}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$0_source_type}}=?{level}*1]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$0_source_type}** [**@{prefix}@{character_name}|repeating_traits_$0_name}**](`%{@{character_name}|repeating_traits_$0_output})
*@{prefix}@{character_name}|repeating_traits_$0_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$1_source_type}}=?{level}*2]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$1_source_type}** [**@{prefix}@{character_name}|repeating_traits_$1_name}**](`%{@{character_name}|repeating_traits_$1_output})description}
*@{prefix}@{character_name}|repeating_traits_$1_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$2_source_type}}=?{level}*3]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$2_source_type}** [**@{prefix}@{character_name}|repeating_traits_$2_name}**](`%{@{character_name}|repeating_traits_$2_output})
*@{prefix}@{character_name}|repeating_traits_$2_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$3_source_type}}=?{level}*4]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$3_source_type}** [**@{prefix}@{character_name}|repeating_traits_$3_name}**](`%{@{character_name}|repeating_traits_$3_output})
*@{prefix}@{character_name}|repeating_traits_$3_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$4_source_type}}=?{level}*5]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$4_source_type}** [**@{prefix}@{character_name}|repeating_traits_$4_name}**](`%{@{character_name}|repeating_traits_$4_output})
*@{prefix}@{character_name}|repeating_traits_$4_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$5_source_type}}=?{level}*6]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$5_source_type}** [**@{prefix}@{character_name}|repeating_traits_$5_name}**](`%{@{character_name}|repeating_traits_$5_output})
*@{prefix}@{character_name}|repeating_traits_$5_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$6_source_type}}=?{level}*7]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$6_source_type}** [**@{prefix}@{character_name}|repeating_traits_$6_name}**](`%{@{character_name}|repeating_traits_$6_output})
*@{prefix}@{character_name}|repeating_traits_$6_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$7_source_type}}=?{level}*8]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$7_source_type}** [**@{prefix}@{character_name}|repeating_traits_$7_name}**](`%{@{character_name}|repeating_traits_$7_output})
*@{prefix}@{character_name}|repeating_traits_$7_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$8_source_type}}=?{level}*9]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$8_source_type}** [**@{prefix}@{character_name}|repeating_traits_$8_name}**](`%{@{character_name}|repeating_traits_$8_output})
*@{prefix}@{character_name}|repeating_traits_$8_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$9_source_type}}=?{level}*10]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$9_source_type}** [**@{prefix}@{character_name}|repeating_traits_$9_name}**](`%{@{character_name}|repeating_traits_$9_output})
*@{prefix}@{character_name}|repeating_traits_$9_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$10_source_type}}=?{level}*11]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$10_source_type}** [**@{prefix}@{character_name}|repeating_traits_$10_name}**](`%{@{character_name}|repeating_traits_$10_output})
*@{prefix}@{character_name}|repeating_traits_$10_description}*
}} {{[[[{0,0@{prefix}@{character_name}|repeating_traits_$11_source_type}}=?{level}*12]]](#" hidden)=**@{prefix}@{character_name}|repeating_traits_$11_source_type}** [**@{prefix}@{character_name}|repeating_traits_$11_name}**](`%{@{character_name}|repeating_traits_$11_output})
*@{prefix}@{character_name}|repeating_traits_$11_description}*
}} {{[0](#" hidden)=[ ](#" hidden null=)}}&{noerror}
You'll need to create an attribute named "prefix" (without quotation marks), consisting of "@{" (again, no quatations). I repeated the lines for 12 features, if you need more, just add more lines (before the last line), incrementing the numbers as you go.