User:SOTO/bot tricks
Categories[[edit] | [edit source]]
Adding a category to the bottom of a page[[edit] | [edit source]]
Step 1[[edit] | [edit source]]
python pwb.py add_text -cat:"category" -text:"[[Category:New category]]" -pt:1 -except:"New category"
Step 2[[edit] | [edit source]]
python pwb.py replace -cat:"New category" -regex "\[\[Category:(New category)\]\]\n([\s\S]*)\n\[\[Category:(.*?)\]\]" "\2\n[[Category:\3]]\n[[Category:\1]]" -pt:1
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:1
Bringing a category to no.1 position[[edit] | [edit source]]
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:1
Adding category for number of parts[[edit] | [edit source]]
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:1
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
}}[[edit] | [edit source]]
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:1
Locations visited by the good Doc[[edit] | [edit source]]
pwb.py replace "-cat:Example" "-regex" "\[\[Category:Locations visited by the(.*?)Doctor\]\]" "[[Category:Example visited by the\1Doctor]]" "-pt:1"
Templates[[edit] | [edit source]]
Implementing {{w/wi
}}[[edit] | [edit source]]
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:1
Adding infobox variable based on category[[edit] | [edit source]]
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:1 -summary:"Adding missing epcount"
Bringing one infobox variable into line, standardising spacing[[edit] | [edit source]]
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:1
Catch-all template order/spacing standardisation[[edit] | [edit source]]
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[[edit] | [edit source]]
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:1
Checking for double NameSorts[[edit] | [edit source]]
python pwb.py replace -regex "\{\{NameSort\}\}\n([\s\S]+)\{\{NameSort\}\}" "\1{{NameSort}}" -pt:1 -transcludes:"NameSort"
General[[edit] | [edit source]]
Piped italics[[edit] | [edit source]]
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:1
python pwb.py replace -regex "\[\[(.*?)\|''\1''\]\]" "''[[\1]]''" "\[\[(.*?) \((.*?)\)\|''\1''\]\]" "''[[\1 (\2)|\1]]''" -summary:"Piped italics fix: P2" -start:! -pt:1
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:1
Punctuation before citation[[edit] | [edit source]]
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:1 -start:! -summary:"Punctuation before citation"
Empty span tags[[edit] | [edit source]]
python pwb.py replace -regex "(\<span\>|\</span\>|\<span class=..\>)" "" -summary:"Removing empty <span> tags" -pt:1 -start:!
Disambig full titles[[edit] | [edit source]]
python pwb.py replace -cat:"Disambiguation pages" -regex "\*( *)''\[\[(.*?) \((.*?)\)\|\2\]\]''" "*\1[[\2 (\3)|''\2'' (\3)]]" "\*(''|\[\[|\w)" "* \1" -summary:"Disambig cleanup" -pt:1
Spacing[[edit] | [edit source]]
After infoboxes[[edit] | [edit source]]
Overly complicated spacing fix[[edit] | [edit source]]
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:1
Before headings[[edit] | [edit source]]
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:1
Horizontal spacing (=/*/:)[[edit] | [edit source]]
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:1
Videos[[edit] | [edit source]]
Good vids[[edit] | [edit source]]
Step 1: DPL search[[edit] | [edit source]]
{{#dpl:
|category=Videos
|modifiedby=SOTO
}}
Step 2[[edit] | [edit source]]
Find-and-replace list into a usable format.
python pwb.py replace "[[Category:Videos]]" "{{good video}}" -pt:1 -page:"File:Video name 1" -page:"File:Video name 2"
You may have to handle videos with double quotation marks in their titles, manually.