我尝试使用正则表达式做一些事情,但我不确定它是否可行。
我在法语维基词典上工作,我试图找到只有 #*
的行来替换它们。问题是我需要获取模板 langue
的最近参数。所以在{{langue|fr}}
中,我需要得到fr
。
这是我的文本示例:
== {{langue|fr}} ==
=== {{S|étymologie}} ===
: Emprunté au {{étyl|ja|fr|mot=津波|tr=tsunami}} du même sens, littéralement « [[vague]] [[portuaire]] ».
=== {{S|nom|fr}} ===
{{fr-rég|tsu.na.mi|pron2=tsy.na.mi}}
'''tsunami''' {{pron|tsu.na.mi|fr}} ''ou'' {{pron|tsy.na.mi|fr}} {{m}}
# Énorme [[vague]] causée par un [[évènement]] [[géologique]] comme un [[séisme]] ou une [[éruption]] volcanique ou [[astronomique]] comme un [[météorite]].
#* ''Le '''tsunami''' de décembre 2004 a balayé l’Asie du Sud-Est.''
== {{langue|en}} ==
=== {{S|étymologie}} ===
: Du {{étyl|ja|en|mot=津波|tr=tsunami}}.
=== {{S|nom|en}} ===
{{en-nom|tsunami|tsunami|p2=tsunamis|tsu.ˈnɑ.mi|tsu.ˈnɑ.mi|pp2=tsu.ˈnɑ.miz}}
'''tsunami'''
# [[#fr|Tsunami]].
#* {{ébauche-exe|en}}
== {{langue|es}} ==
=== {{S|étymologie}} ===
: Du {{étyl|ja|es|mot=津波|tr=tsunami|sens=}}.
=== {{S|nom|es}} ===
{{es-rég|}}
'''tsunami''' {{pron||es}} {{m}}
# [[#fr|Tsunami]].
#*
== {{langue|sv}} ==
=== {{S|étymologie}} ===
: {{ébauche-étym|sv}}
=== {{S|nom|sv}} ===
{{sv-nom-c-er|2=tsunamin}}
'''tsunami''' {{pron||sv}} {{c}}
# [[tsunami#fr|Tsunami]].
#* {{ébauche-exe|sv}}
我尝试使用这个正则表达式 {{langue\|([^}]+)}}((?:.|\n)+)(#+\*) ?'*\n
。问题是我的正则表达式几乎计算了整个文本。这不是我想要的。在我的示例中,错误行位于 es 部分。因此,我需要获取的参数是 es。在我的正则表达式中,有三个捕获组:第一个用于语言代码,第二个用于其他两个组之间的所有文本,最后一个用于获取行的开头,如 #
可以改变。如果可能,我会将匹配的字符串替换为 {{langue|$1}}$2$3 {{ébauche-exe|$1}}
。
这可能使用这种正则表达式吗?如果是这样,如何?如果不可能,有没有办法通过正则表达式来做到这一点?
最佳答案
你可以使用
(?m)^== {{langue\|([^{}]+)}}(.*(?:\n(?!== {{langue\|[^{}]+}}).*)*)(#+\*) ?'*$
参见 regex demo .
详细信息:
(?m)^
- 一行的开始==
- 文字串{{langue\|
-{{langue|
字符串([^{}]+)
- 第 1 组:{
和}
以外的一个或多个字符>}}
-}}
字符串(.*(?:\n(?!== {{langue\|[^{}]+}}).*)*)
- 第 2 组:a 的其余部分行,然后是不以== {{langue|
开头的 0 行或多行,然后是{
和}
以外的一个或多个字符,以及然后}}
(#+\*)
- 第 3 组:一个或多个#
,然后是一个*
字符?
- 可选空格'*
- 零个或多个'
字符$
- 行尾。
关于regex - 使用正则表达式获取最短匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66233638/