User:SOTO/bot tricks: Difference between revisions

From Tardis Wiki, the free Doctor Who reference
No edit summary
Tag: sourceedit
No edit summary
 
(58 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Adding a category to the bottom of a page ==
= Categories =
=== Step 1 ===
=== Adding a category to the bottom of a page ===
<pre>python add_text.py -cat:"category" -text:"[[Category:New category]]" -pt:1 -except:"New category"</pre>
==== Step 1 ====
=== Step 2 ===
<pre style="background:black!important;color:white">
<pre>python replace.py -cat:"New category" -regex "\[\[Category:(New category)\]\]\r\n([\s\S]*)\r\n\[\[Category:(.*?)\]\]" "\2\n[[Category:\3]]\n[[Category:\1]]" -pt:1</pre>
python pwb.py add_text -cat:"category" -text:"[[Category:New category]]" -pt:1 -except:"New category"
</pre>
==== Step 2 ====
<pre style="background:black!important;color:white">
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
</pre>
'''Absolute bottom'''
<pre style="background:black!important;color:white">
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
</pre>
 
=== Bringing a category to no.1 position ===
<pre style="background:black!important;color:white">
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
</pre>
 
=== Adding category for number of parts ===
In this case, it's written for comics specifically:
<pre style="background:black!important;color:white;font-size:.8em">
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
</pre>
[[: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 <nowiki>{{</nowiki><code>wikipediainfo</code>}} ===
<pre style="background:black!important;color:white">
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
</pre>
 
 
=== Locations visited by the good Doc ===
<pre style="background:black!important;color:white">
pwb.py replace "-cat:Example" "-regex" "\[\[Category:Locations visited by the(.*?)Doctor\]\]" "[[Category:Example visited by the\1Doctor]]" "-pt:1"
</pre>
 
 
= Templates =
=== Implementing <nowiki>{{</nowiki><code>w/wi</code>}} ===
<pre style="background:black!important;color:white">
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
</pre>
 
=== Adding infobox variable based on category ===
The example here is for adding <code>epcount</code>, where it is missing, for one-part comic stories. (It begins with the category, excludes all pages where <code>epcount</code> is already present, then neatly places the information in the relevant section, with consistent spacing for the page in question.)
<pre style="background:black!important;color:white">
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"
</pre>
 
=== Bringing one infobox variable into line, standardising spacing ===
In this case, the variable is <code>epcount</code>, which we want to go before <code>prev, or, if <code>prev</code> is preceded by <code>series</code>, before <code>series</code>...
<pre style="background:black!important;color:white;font-size:.8em">
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
</pre>
 
=== Catch-all template order/spacing standardisation ===
<pre style="background:black!important;color:white;font-size:.8em">
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"
</pre>
 
=== Autolinking infobox variables ===
<pre style="background:black!important;color:white;font-size:.8em">
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
</pre><!--
 
"\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring|featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n" "\|( *)(featuring.*)( *)=( *)(.*?)\|(.*?)\n" "|\1\2\3=\4\5\n"-->
 
=== Checking for double NameSorts ===
<pre style="background:black!important;color:white">
python pwb.py replace -regex "\{\{NameSort\}\}\n([\s\S]+)\{\{NameSort\}\}" "\1{{NameSort}}" -pt:1 -transcludes:"NameSort"
</pre>
 
= General =
=== Piped italics ===
<!--
<pre style="background:black!important;color:white">
python pwb.py replace -regex "\[\[(TV|AUDIO|COMIC|PROSE|GAME|REF|DOC|WC|NOTVALID|CON|TWD|BFX|DCOM|PCOM|ICOM|INFO|DWAN)\]\]: \[\[(.*?) \((.*?)\)\|''(.*?)''\]\]" "[[\1]]: ''[[\2 (\3)|\4]]''" "\[\[(.*?)\|''\1''\]\]" "''[[\1]]''" "\[\[(.*?) \((.*?)\)\|''\1''\]\]" "''[[\1 (\2)|\1]]''" "\[\[([\w\d\s\(\)]+?)\|''([\w\d\s\(\)]+?)''\]\]" "''[[\1|\2]]''" "''\[\[(.*?) - list of appearances\|'''see list'''\]\]''" "[[\1 - list of appearances|'''''see list''''']]" -summary:"Piped italics fix(es)" -start:! -pt:1
</pre>
 
-->
<pre style="background:black!important;color:white">
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
</pre>
<pre style="background:black!important;color:white">
python pwb.py replace -regex "\[\[(.*?)\|''\1''\]\]" "''[[\1]]''" "\[\[(.*?) \((.*?)\)\|''\1''\]\]" "''[[\1 (\2)|\1]]''" -summary:"Piped italics fix: P2" -start:! -pt:1
</pre>
<pre style="background:black!important;color:white">
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
</pre>
 
=== Punctuation before citation ===
<pre style="background:black!important;color:white">
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"
</pre>
 
=== Empty span tags ===
<pre style="background:black!important;color:white">
python pwb.py replace -regex "(\<span\>|\</span\>|\<span class=..\>)" "" -summary:"Removing empty <span> tags" -pt:1 -start:!
</pre>
 
=== Disambig full titles ===
<pre style="background:black!important;color:white">
python pwb.py replace -cat:"Disambiguation pages" -regex "\*( *)''\[\[(.*?) \((.*?)\)\|\2\]\]''" "*\1[[\2 (\3)|''\2'' (\3)]]" "\*(''|\[\[|\w)" "* \1" -summary:"Disambig cleanup" -pt:1
</pre>
 
== Spacing ==
==== After infoboxes ====
===== Overly complicated spacing fix =====
<pre style="background:black!important;color:white">
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
</pre>
 
==== Before headings ====
<pre style="background:black!important;color:white">
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
</pre>
 
==== Horizontal spacing (=/*/:) ====
This ''baasically'' does the job, though it's messy and inefficient:
<pre style="background:black!important;color:white">
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
</pre>
 
= Videos =
=== Good vids ===
==== Step 1: DPL search ====
<pre>{{#dpl:
|category=Videos
|modifiedby=SOTO
}}</pre>
==== Step 2 ====
Find-and-replace list into a usable format.
<pre style="background:black!important;color:white">python pwb.py replace "[[Category:Videos]]" "{{good video}}" -pt:1 -page:"File:Video name 1" -page:"File:Video name 2"</pre>
You may have to handle videos with double quotation marks in their titles, manually.
 
[[Category:User SOTO]]
[[Category:User SOTO]]

Latest revision as of 19:53, 3 November 2024

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.