提问人:oli_vi_er 提问时间:9/10/2021 最后编辑:oli_vi_er 更新时间:9/10/2021 访问量:92
使用AutoWikiBrowser的wiki文章中的句子大小写
Sentence case in wiki articles using AutoWikiBrowser
问:
我正在尝试使用AutoWikiBrowser(AWB)(处理正则表达式查找和替换的自动编辑器,但并非所有功能都可用)将wiki文章的文本放在句子大小写中。
问题在于wikicode使用许多不同的标签来格式化文本,并且还有模板(在双卷曲制动器内),图像(内部)和类别(内部)应该保持不变。首字母缩略词也应保留在大写字母中。[[File:image.png|Caption]]
[[Category:Category name]]
章节标题(在两到五个等号内)应放在句子大小写中,链接中的单词(在双方块内)应被视为普通文本。
我遇到了麻烦,因为我不熟悉正/负前瞻/后视,而且我找不到一种方法来使正则表达式变得简单,而不必编写所有可能的语法。
此外,如果 AWB 可以连续执行多个正则表达式,那么这里并不真正可行,因为例如,我无法制作正则表达式来匹配正文中的单词而不是模板中的单词(或者我没有找到这样做的方法)。
请注意,大小写修饰符在 AWB 中不起作用,但可以替换为 ,所以不要介意它并在您的示例中使用,我会自己调整代码。有些令牌也不起作用,不幸的是我不知道正则表达式库 AWB 正在使用什么。\L
{{subst:lg:}}
\L
\h
这是我想编辑的文章示例,我只想匹配:Yes
No Yes no Yes. No, Yes.
== No Yes no ==
==== No Yes ====
[[No Yes]] Yes Yes no no no.
No no [[NO Yes]].
'''[[No Yes]]'''
''[[No Yes]]'' no Yes ''[[Yes Yes]]'' no ''Yes no''.
{{No:No|No No}}
* No Yes.
* '''No Yes'''.
* [[No Yes]].
* '''[[No Yes]]'''.
# No Yes.
#** No Yes.
#: No Yes.
No no no [[File:No.png|No No]] Yes [[Yes Yes]].
[[Category:No No]]
例如,我尝试使用这个正则表达式:
查找: 替换: \L$1(?<!\n|\. |\[\[Category:|\[\[File:)(?<!\{\||\{\{|^\[\[|<!--|^== |^=== |^==== |^===== |^''|^''')(\b[A-Z][a-z]*\b)(?![\w\s]*[\}|}]|[\w\s]*-->)
但它似乎过于复杂,而且它也没有像我想要的那样工作。
对不起,如果这看起来很复杂,但我现在已经尝试了两天,我似乎在兜圈子......
[编辑]
这个问题已经得到了很好的回答,但我想添加一个请求:这个正则表达式可以只在多行注释(内部/标签)和表格(内部/标签)之外工作吗?<!--
-->
{|
|}
如果可以将句子大小写放入表格单元格(由管道和感叹号分隔)中,其中可能包括链接和/或斜体/粗体,那就更好了?
下面是它的样子:
No Yes
<!-- No No No
No No
No
-->
{| class="wikitable"
|+ No Yes
|-
! '''No Yes''' !! '''No''' !! '''[[No Yes]]'''
|-
| ''No Yes'' || ''[[No Yes Yes]]'' || ''No Yes''
|-
| No Yes || No Yes || [[No Yes Yes]]
|}
答:
由于 AWB 中使用的正则表达式风格原来是 .NET,因此可以使用具有可变宽度后视模式的正则表达式:
(?m)(?!^)(?<!\.\s+|\[\[(?:Category|File):[^\]\[]*)(?<!\{\||\{\{|^(?:(?:\*\s*)?'?''|\*\s*)?\[\[|<!--|^=+\s*|^#(?::|\*+)?\s*|^\*\s*(?:''')?)\b([A-Z][a-z]*)\b(?![^{}]*}}|[\w\s]*-->)(?<!\[\[(?:Category|File)(?=:[^\]\[]*]]))
请参阅正则表达式演示。细节:
(?m)
- 多线模式开启(?!^)
- 不在行的开头(?<!\.\s+|\[\[(?:Category|File):[^\]\[]*)
- 紧接着,应该没有 和 一个或多个空格,或者后面跟着 or 和 然后,然后是零个或多个字符,除了 和.
[[
Category
File
:
[
]
(?<!\{\||\{\{|^(?:(?:\*\s*)?'?''|\*\s*)?\[\[|<!--|^=+\s*|^#(?::|\*+)?\s*|^\*\s*(?:''')?)
- 负后视,如果之前有类似\{\||
-{|
string,或者\{\{|
-{{
string,或者^(?:(?:\*\s*)?'?''|\*\s*)?\[\[|
- 可选序列的可选序列 和 零 ro 更多空格,后跟可选的 char 和 then 或 char 后跟零个或多个空格,然后 ,或*
'
''
*
[[
<!--|^=+\s*|
^#(?::|\*+)?\s*|
^\*\s*(?:''')?
\b
- 词边界([A-Z][a-z]*)
- 一个大写字母,后跟零个或多个小写字母(在 .NET 中,您还可以用于匹配任何 Unicode 字母)\p{Lu}\p{Ll}*
\b
- 词边界(?![^{}]*}}|[\w\s]*-->)
- 否定展望:如果除 and and then 之外有零个或多个字符,或者任何零个或多个单词/空格字符 and then ,则不允许匹配{
}
}}
-->
(?<!\[\[(?:Category|File)(?=:[^\]\[]*]]))
- 如果紧接着有 ,或 和 之后,除了 和 和 之外有零个或多个字符,则匹配失败。[[
Category
File
[
]
]]
评论
(?!^)(?<!\.\s+| \|\| (?:''|\[\[)?|(?m:^\| (?:'')?|^\|\+\s*)|! '''(?:\[\[)?| ''\[\[|\[\[(?:Category|File):[^\]\[]*)(?<!\{\||\{\{|^(?:(?:\*\s*)?'?''|\*\s*)?\[\[|<!--|^=+\s*|^#(?::|\*+)?\s*|^\*\s*(?:''')?)\b([A-Z][a-z]*)\b(?![^{}]*}}|[\w\s]*-->)(?<!\[\[(?:Category|File)(?=:[^\]\[]*]]))
m
评论
(?!^)(?<!\. |\[\[(?:Category|File):[^\]\[]*)(?<!\{\||\{\{|^(?:(?:\*\s*)?'?''|\*\s*)?\[\[|<!--|^=+\s*|^#(?::|\*+)?\s*|^\*\s*(?:''')?)\b([A-Z][a-z]*)\b(?![^{}]*}}|[\w\s]*-->)(?<!\[\[(?:Category|File)(?=:[^\]\[]*]]))
(?:)
\h