User:SOTO/bot tricks

From Tardis Wiki, the free Doctor Who reference
< User:SOTO
Revision as of 03:17, 13 March 2024 by SOTO (talk | contribs)

Categories

Adding a category to the bottom of a page

Step 1

python pwb.py add_text -cat:"category" -text:"[[Category:New category]]" -pt:2 -except:"New category"

Step 2

python pwb.py replace -cat:"New category" -regex "\[\[Category:(New category)\]\]\n([\s\S]*)\n\[\[Category:(.*?)\]\]" "\2\n[[Category:\3]]\n[[Category:\1]]" -pt:2

Absolute bottom

python pwb.py replace -cat:"New category" -regex "\[\[Category:(New category)\]\]\n([\s\S]*)\n\[\[Category:(.*?)\]\]" "\2\n[[Category:\3]]\n[[Category:\1]]" "\[\[Category:(New category)\]\]\n\[\[Category:(.*?)\]\]" "[[Category:\2]]\n[[Category:\1]]" -pt:2

Bringing a category to no.1 position

python pwb.py replace -cat:"Target category" -regex "\[\[Category:(.*?)\]\]\n*([\s\S]*)\n\[\[Category:(Target category)\]\]" "[[Category:\3]]\n[[Category:\1]]\n\2" "\[\[Category:(.*?)\]\]\n\[\[Category:(Target category)\]\]" "[[Category:\2]]\n[[Category:\1]]" -pt:2

Adding category for number of parts

In this case, it's written for comics specifically:

python pwb.py replace -regex "epcount( *?)=( *?)([^\n]*?)\|featuring" "epcount\1=\2\3\n|featuring" "epcount( *)=( *)(.*?)\}\}" "epcount\1=\2\3\n}}" "\|prev   ( *?)=( *)(.*?)\n([\s\S]*)\n\|epcount=(.*?)\n" "|epcount\1= \5\n|prev   \1=\2\3\n\4\n" "epcount=([^ ].*?)\n" "epcount = \1\n" "\|prev( *?)=( *?)(.*?)\n(\s\S]*)\n\|epcount ( *?)= ( *?)(.*?)\n" "|epcount \5= \7\n|prev\1=\2\3\n\4\n" "\|series( *)=( *)(.*?)\n\|epcount( *)=( *)(.*?)\n" "|epcount\4=\5\6\n|series\1=\2\3\n" "epcount( *)=( *)(.+)\n([\s\S]*)\n\[\[Category:(.*?)\]\]" "epcount\1=\2\3\n\4\n[[Category:\5]]\n[[Category:{{subst:#switch:\3|1=One|2=Two|3=Three|4=Four|5=Five|6=Six|7=Seven|8=Eight|9=Nine|10=Ten|11=Eleven|12=Twelve|#default=X}} part comics]]" -excepttext:" part comics\]\]" -catr:"Comic stories" -summary:"Re-organising and adding category" -pt:2

Category:X part comics, here, acts as a failsafe measure to check for exceptions. Adding in category:Comics with thirteen or more parts, which follows an unusual naming format, would be laborious (and not worth the effort, in this case).

Adding FTRW category only if contains {{wikipediainfo}}

python pwb.py replace -catr:"Example" -regex "\{\{[Ww]ikipediainfo([\s\S]*)\[\[Category:(.*?)\]\]" "{{wikipediainfo\1[[Category:\2]]\n[[Category:Example from the real world]]" -excepttext:"Example from the real world" -pt:2


Locations visited by the good Doc

pwb.py replace "-cat:Example" "-regex" "\[\[Category:Locations visited by the(.*?)Doctor\]\]" "[[Category:Example visited by the\1Doctor]]" "-pt:2"


Templates

Implementing {{w/wi}}

python pwb.py replace -regex "''\[\[(:wikipedia|wikipedia):(.*?)\|(.*?)\]\]''" "{{wi|\2|\3}}" "\[\[(:wikipedia|wikipedia):(.*?)\|(.*?)\]\]" "{{w|\2|\3}}" "\{\{(w|wi)\|(.*?)\|\2\}\}" "{{\1|\2}}" "\{\{(w|wi)\|(\w)(.*?)\|(\w)\3\}\}" "{{\1|\4\3}}" "\{\{(w|wi)\|(\w)(.*?)\|(\w)\3(s)\}\}" "{{\1|\4\3|\4\3s}}" -summary:"Converting to {{w}} and {{wi}}" -start:! -pt:2

Adding infobox variable based on category

The example here is for adding epcount, where it is missing, for one-part comic stories. (It begins with the category, excludes all pages where epcount is already present, then neatly places the information in the relevant section, with consistent spacing for the page in question.)

python pwb.py replace -catr:"One part comics" -excepttext:"epcount( *?)=( *?)1\n" "-regex" "\|prev(   )( *?)=( *?)(.*?)\n" "|epcount\2= 1\n|prev\1\2=\3\4\n" "\|series( *?)=( *?)(.*?)\n\|epcount( *)=( *)(.*?)\n" "|epcount\4=\5\6\n|series\1=\2\3\n" -pt:2 -summary:"Adding missing epcount"

Bringing one infobox variable into line, standardising spacing

In this case, the variable is epcount, which we want to go before prev, or, if prev is preceded by series, before series...

python pwb.py replace -regex "epcount( *?)=( *?)([^\n]*?)\|featuring" "epcount\1=\2\3\n|featuring" "next( *?)=( *?)([^\n]*?)\|epcount( *?)=( *?)([^ ]*?)\n" "next\1=\2\3\n|epcount\4= \6\n" "epcount( *)=( *)(.*?)\}\}" "epcount\1=\2\3\n}}" "\|prev   ( *?)=( *)(.*?)\n([\s\S]*)\n\|epcount=(.*?)\n" "|epcount\1= \5\n|prev   \1=\2\3\n\4\n" "epcount=([^ ].*?)\n" "epcount = \1\n" "\|prev( *?)=( *?)(.*?)\n([\s\S]*)\n\|epcount( *?)=( *?)([^ ]*?)\n" "|epcount\5= \7\n|prev\1=\2\3\n\4\n" "\|epcount=( *)([^ ]*?)\n" "|epcount = \2\n" "\|series( *)=( *)(.*?)\n\|epcount( *)=( *)(.*?)\n" "|epcount\4=\5\6\n|series\1=\2\3\n" -catr:"Comic stories" -summary:"Re-organising infobox" -pt:2

Catch-all template order/spacing standardisation

python pwb.py replace -regex "\{\{([Tt]itle dab away|[Rr]eal world)\}\}\{\{([Rr]eal world|[Tt]itle dab away)\}\}" "{{title dab away}}\n{{real world}}" "}}{{Infobox" "}}\n{{Infobox" "\{\{(.*?)stub\}\}\n\{\{[Tt]itle dab away\}\}\n\{\{[Rr]eal world\}\}" "{{title dab away}}\n{{real world}}\n{{\1stub}}" "\{\{(.*?)stub\}\}\{\{[Tt]itle dab away\}\}" "{{title dab away}}\n{{\1stub}}" "\{\{[Rr]eal world\}\}\n\{\{[Tt]itle dab away\}\}\n{\{(.*?)stub\}\}" "{{title dab away}}\n{{real world}}\n{{\1stub}}" "\{\{[Tt]itle dab away\}\}\n\{\{(.*?)stub\}\}\n{\{[Rr]eal world\}\}" "{{title dab away}}\n{{real world}}\n{{\1stub}}" "\{\{real world\}\}\{\{(.*?)stub\}\}\n\{\{title dab away\}\}\n([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2}}{{\1stub}}" "\{\{ImageLink(.*?)\}\}\{\{real world\}\}\{\{title dab away\}\}\{\{Infobox" "{{title dab away}}\n{{real world}}\n{{ImageLink\1}}\n{{Infobox" "\{\{ImageLink(.*?)\}\}( *)\n\{\{[Rr]eal world\}\}( *)\n\{\{[Tt]itle dab away\}\}" "{{title dab away}}\n{{real world}}\n{{ImageLink\1}}" "\{\{ImageLink(.*?)\}\}\{\{[Rr]eal world\}\}\{\{[Tt]itle dab away\}\}" "{{title dab away}}\n{{real world}}\n{{ImageLink\1}}" "\{\{[Rr]eal world\}\}\{\{[Tt]itle dab away\}\}" "{{title dab away}}\n{{real world}}" "\{\{real world\}\}\{\{[Rr]etitle\|(\'\'|.)(\{\{PAGENAME\}\})(\'\'|.)\}\}" "{{retitle|\1\2\3}}\n{{real world}}" "\{\{real world\}\}\{\{[Rr]etitle\|(.*?)\}\}" "{{retitle|\1}}\n{{real world}}" "\{\{real world\}\}\{\{ImageLink(.*?)\}\}\{\{[Tt]itle dab away\}\}" "{{title dab away}}\n{{real world}}\n{{ImageLink\1}}" "\{\{real world\}\}\{\{ImageLink(.*?)\}\}" "{{real world}}\n{{ImageLink\1}}" "\{\{real world\}\}\n\{\{ImageLink(.*?)\}\}\n\{\{title dab away\}\}" "{{title dab away}}\n{{real world}}\n{{ImageLink\1}}" "\{\{real world\}\}\{\{target years\}\}" "{{real world}}\n{{target years}}" "'''\{\{[rR]eal world\}\}" "{{real world}}\n'''" "\{\{[rR]eal world\}\} \n" "{{real world}}\n" "\{\{[rR]eal world\}\}(.+)\n" "{{real world}}\n\1\n" "\{\{[rR]eal world\}\}\n\n" "{{real world}}\n" "\{\{title dab away\}\}\n\{\{real world\}\}\n\{\{(.*?)stub\}\}\n([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2{{il\3}}\4{{il\5}}\6{{il\7}}\8{{il\9}}\10}}{{\1stub}}" "\{\{title dab away\}\}\n\{\{real world\}\}\n\{\{(.*?)stub\}\}\n([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2{{il\3}}\4{{il\5}}\6{{il\7}}\8}}{{\1stub}}" "\{\{title dab away\}\}\n\{\{real world\}\}\n\{\{(.*?)stub\}\}\n([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2{{il\3}}\4{{il\5}}\6}}{{\1stub}}" "\{\{title dab away\}\}\n\{\{real world\}\}\n\{\{(.*?)stub\}\}\n([\s\S]*?)\{\{[Ii]l(.*?)\}\}([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2{{il\3}}\4}}{{\1stub}}" "\{\{title dab away\}\}\n\{\{real world\}\}\n\{\{(.*?)stub\}\}\n([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2}}{{\1stub}}" "\{\{real world\}\}\n\{\{(.*?)stub\}\}\n\{\{title dab away\}\}\n([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2}}{{\1stub}}" "\n\|(.*?)\}\}\{\{" "\n|\1\n}}{{" "\}\}\{\{(.*?) stub\}\}\'\'\'" "}}{{\1 stub}}\n'''" "\}\}\{\{(.*?) stub\}\}\{\{[yY]ou may(.*?)\}\}" "}}{{\1 stub}}\n{{you may\2}}" "\}\}\{\{(.*?) stub\}\}\n\{\{(.*?)\}\}\'\'\'" "}}{{\1 stub}}\n{{\2}}\n'''" "\{\{real world\}\}\n\{\{(.*?)stub\}\}\n\{\{title dab away\}\}\n([\s\S]*?)\}\}" "{{title dab away}}\n{{real world}}\n\2}}{{\1stub}}" "\{\{real world\}\}\n([\s\S]*?)\}\}\{\{ImageLink(.*?)\}\}" "{{real world}}\n{{ImageLink\2}}\n\1}}" "\|([^\n]*?)( +)=([^ ]*?)\n" "|\1\2= \3\n" "\|([^\n]*?)( *?)=( {2,})([^ ]*?)\n" "|\1\2= \4\n" "\{\{[sS]ubpage tabs\}\}\n\{\{[tT]itle dab away\}\}" "{{title dab away}}\n{{subpage tabs}}" "(=+)(=+)( *)([^=]*?)( *)\1 \2" "\1\2\3\4\5\1\2" "(=+)(=+)( *)([^=]*?)( *)\1 \2" "\1\2 \4 \1\2" "\n(=+)( *)([^=]*?)( *)\1 \n" "\n\1 \3 \1\n" "\{\{([yY]ou may|[dD]ab page)\|(.*?)\}\}\n\n'''" "{{\1|\2}}\n'''" -pt:1 -summary:"Standardising template spacing and order" -transcludes:"real world"

Autolinking infobox variables

python pwb.py replace -regex "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11\n|\1featuring9\2=\3\12\n|\1featuring10\2=\3\13" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11\n|\1featuring9\2=\3\12" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\], \[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\n" "\n|\1featuring\2=\3\4\n" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11\n|\1featuring9\2=\3\12\n|\1featuring10\2=\3\13" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11\n|\1featuring9\2=\3\12" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10\n|\1featuring8\2=\3\11" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9\n|\1featuring7\2=\3\10" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8\n|\1featuring6\2=\3\9" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7\n|\1featuring5\2=\3\8" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6\n|\1featuring4\2=\3\7" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5\n|\1featuring3\2=\3\6" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\|(.*?)\}\}" "\n|\1featuring\2=\3\4\n|\1featuring2\2=\3\5" "\n\|( *)featuring( *)=( *)\{\{il\|(.*?)\}\}\n" "\n|\1featuring\2=\3\4\n" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8\n|featuring6\2=\3\9\n|featuring7\2=\3\10\n|featuring8\2=\3\11\n|featuring9\2=\3\12\n|featuring10\2=\3\13" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8\n|featuring6\2=\3\9\n|featuring7\2=\3\10\n|featuring8\2=\3\11\n|featuring9\2=\3\12" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8\n|featuring6\2=\3\9\n|featuring7\2=\3\10\n|featuring8\2=\3\11" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8\n|featuring6\2=\3\9\n|featuring7\2=\3\10" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8\n|featuring6\2=\3\9" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7\n|featuring5\2=\3\8" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6\n|featuring4\2=\3\7" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5\n|featuring3\2=\3\6" "\n\|( *)featuring( *)=( *)\[\[(.*?)\]\]\<br */*\>\[\[(.*?)\]\]" "\n|\1featuring\2=\3\4\n|featuring2\2=\3\5" "\|( *)(featuring|\1featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|\1featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|\1featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring\d)   " "|\1\2  " "\|( *)(featuring\d\d)    " "|\1\2  " -transcludes:"Infobox Story" -summary:"Autolinking featuring variable" -pt:2

Checking for double NameSorts

python pwb.py replace -regex "\{\{NameSort\}\}\n([\s\S]+)\{\{NameSort\}\}" "\1{{NameSort}}" -pt:2 -transcludes:"NameSort"

General

Piped italics

python pwb.py replace -regex "\[\[(TV|AUDIO|COMIC|PROSE|GAME|REF|DOC|WC|NOTVALID)\]\]: \[\[(.*?) \((.*?)\)\|''(.*?)''\]\]" "[[\1]]: ''[[\2 (\3)|\4]]''" -summary:"Piped italics fix: P1" -start:! -pt:2
python pwb.py replace -regex "\[\[(.*?)\|''\1''\]\]" "''[[\1]]''" "\[\[(.*?) \((.*?)\)\|''\1''\]\]" "''[[\1 (\2)|\1]]''" -summary:"Piped italics fix: P2" -start:! -pt:2
python pwb.py replace -regex "\[\[([\w\d\s\(\)]+?)\|''([\w\d\s\(\)]+?)''\]\]" "''[[\1|\2]]''" "''\[\[(.*?) - list of appearances\|'''see list'''\]\]''" "[[\1 - list of appearances|'''''see list''''']]" -summary:"Piped italics fix: P3" -start:! -pt:2

Punctuation before citation

python pwb.py replace -regex "(\w|\]\]|\'\'|[\!-#]) \(\[\[(TV|AUDIO|COMIC|PROSE|POEM|GAME|FILM|REF|DOC|WC|HOMEVID|NOTVALID)\]\]: \'\'\[\[([^\)]*? \([^\)]*?\)\|[^\)]*?|[^\)]*?)\]\]\'\'\)(\.|,|;)" "\1\4 ([[\2]]: ''[[\3]]'')" "(\.|,|;) \(\[\[(TV|AUDIO|COMIC|PROSE|POEM|GAME|FILM|REF|DOC|WC|HOMEVID|NOTVALID)\]\]: \'\'\[\[([^\)]*? \([^\)]*?\)\|[^\)]*?|[^\)]*?)\]\]\'\'\)(\1)" "\1 ([[\2]]: ''[[\3]]'')" "(\w|\]\]|\'\'|[\!-#]) \(\[\[(TV|AUDIO|COMIC|PROSE|POEM|GAME|FILM|REF|DOC|WC|HOMEVID|NOTVALID)\]\]: (.)\[\[([^\)]*? \([^\)]*?\)\|[^\)]*?|[^\)]*?)\]\]\3\)(\.|,|;)" "\1\5 ([[\2]]: \3[[\4]]\3)" "(\.|,|;) \(\[\[(TV|AUDIO|COMIC|PROSE|POEM|GAME|FILM|REF|DOC|WC|HOMEVID|NOTVALID)\]\]: (.)\[\[([^\)]*? \([^\)]*?\)\|[^\)]*?|[^\)]*?)\]\]\3\)(\1)" "\1 ([[\2]]: \3[[\4]]\3)" -pt:2 -start:! -summary:"Punctuation before citation"

Empty span tags

python pwb.py replace -regex "(\<span\>|\</span\>|\<span class=..\>)" "" -summary:"Removing empty <span> tags" -pt:2 -start:!

Disambig full titles

python pwb.py replace -cat:"Disambiguation pages" -regex "\*( *)''\[\[(.*?) \((.*?)\)\|\2\]\]''" "*\1[[\2 (\3)|''\2'' (\3)]]" "\*(''|\[\[|\w)" "* \1" -summary:"Disambig cleanup" -pt:1

Spacing

After infoboxes

Overly complicated spacing fix
python pwb.py replace -regex "\{\{Infobox([\s\S]*?)\}\}\n\{\{([Yy]ou may)" "{{Infobox\1}}{{you may" "\{\{Infobox([\s\S]*?)\}\}\n\{\{([Dd]ab page)" "{{Infobox\1}}{{dab page" "\{\{Infobox([\s\S]*?)\}\}\n\{\{([Ww]ikipediainfo)" "{{Infobox\1}}{{wikipediainfo" "(\}\}\{\{|\{\{)([sS]tub|.*? stub|wikipediainfo)\}\}\{\{(you may|dab page)" "\1\2}}\n{{\3" "\n\}\}\{\{(.*?)\}\}\{\{(you may|dab page|wikipediainfo)" "\n}}{{\1}///}{{\2" "\{\{Infobox([\s\S]*?)(\]\]|\)|\w)\}\}\{\{(you may|dab page|wikipediainfo)" "{{Infobox\1\2\n}}{{\3" "\}\/\/\/\}" "}}" "\{\{Infobox([\s\S]*?)\}\}\n\n'''" "{{Infobox\1}}\n'''" -summary:"Template [[T:SPACING|spacing]]" -start:! -pt:2

Before headings

python pwb.py replace -regex "(\w|\)|\.|\')\n==" "\1\n\n==" "(\w|\)|\.|\')( *)\n==" "\1\n\n==" "\n\n\n==" "\n\n==" -excepttext:"PLEASE do not alter" -summary:"[[T:SPACING|Vertical spacing]]" -start:! -pt:2

Horizontal spacing (=/*/:)

This baasically does the job, though it's messy and inefficient:

python pwb.py replace -regex "\n(\*+)(\S)" "\n\1 \2" "(==+)(\S.*?\S)(==+)" "\1 \2 \3" "(=+|==|===|====) = (.*?) = (=+|==|===|====)" "\1= \2 =\3" "== =" "===" "= ==" "===" "(\*|\*+|\*\*|\*\*\*|\*\#|\*\*\#) (\*|\#|\#+|\#\#|\#\#\#|\:|\:+|\:\:|\:\:\:)(.*?)" "\1\2 \3" "\* \*" "**" "\* \#" "*#" "\# \#" "##" "\*  " "* " "\#  " "# " "\:  " ": " -summary:"Horizontal spacing" -start:! -pt:2

Videos

Good vids

Step 1: DPL search

{{#dpl:
|category=Videos
|modifiedby=SOTO
}}

Step 2

Find-and-replace list into a usable format.

python pwb.py replace "[[Category:Videos]]" "{{good video}}" -pt:2 -page:"File:Video name 1" -page:"File:Video name 2"

You may have to handle videos with double quotation marks in their titles, manually.