【问题标题】:Can regex do this?正则表达式可以做到这一点吗?
【发布时间】:2016-04-18 23:42:41
【问题描述】:

之前:

=={{int:filedesc}}==
{{Information
|description = wikiwoordenboek audio
|date =
|source =
|author =
|permission =
|other_versions =
}}
[[Category:Dutch pronunciation|Example]]

是否可以找到|]]之间的任何内容,然后用它来替换“wikiwoodenboek音频”

之后:

=={{int:filedesc}}==
{{Information
|description = Example
|date =
|source =
|author =
|permission =
|other_versions =
}}
[[Category:Dutch pronunciation|Example]]

【问题讨论】:

  • 你应该显示你想要的输出。包含wikiwoordenboek audio 的行应该变成|description = Example 吗?模式匹配是由|description =wikiwoordenboek audio 还是其他什么东西触发的?整个文本块都在内存中吗?内存中还有其他内容,还是仅此内容?最后一行应该保持不变吗?您使用的是“正则表达式”的哪个亚种?宿主语言是 Python 还是其他语言?
  • 您能否举例说明您希望“之后”文本的外观?您的字符串 |(.*)]] 似乎是 Wiki 标记的语法错误,所以我认为它应该是 |(.*)}}
  • s/\|[^\]]+\]\]/|wikiwoordenboek audio]]/g
  • @JonathanLeffler 添加了所需的输出。宿主语言 python。需要替换的描述保持一致,附加文本可能会出现在源、日期等前面。

标签: regex pywikibot


【解决方案1】:

试试这个

(\|description =\s*)([^\n]+)(.*\[\[)([^\|]+\|)([^]]+)

Regex demo

【讨论】:

  • 我为我的糟糕问题道歉,我的意思是在翻译中丢失了。正如我添加到原始问题中的所需输出所示,我正在寻找它来替换描述行中的“wikiwoodenboek 音频”,而不是类别行。
【解决方案2】:

使用mwparserfromhell

>>> import mwparserfromhell
>>> t = """=={{int:filedesc}}==
... {{Information
... |description = wikiwoordenboek audio
... |date =
... |source =
... |author =
... |permission =
... |other_versions =
... }}
... [[Category:Dutch pronunciation|Example]]"""
>>> for i in mwparserfromhell.parse(t).filter_templates():
...     if 'information' in i.name.lower():
...         i.get('description').value = 'Example'
... 
>>> t
u'{{Information\n|description =Example|date =\n|source =\n|author =\n|permission =\n|other_versions =\n}}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2012-08-28
    • 1970-01-01
    • 2015-03-21
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多