【问题标题】:Notepad ++ regex. Finding and replacing with wildcard, but without allowing any spaces?记事本++正则表达式。查找和替换通配符,但不允许任何空格?
【发布时间】:2017-10-15 17:20:14
【问题描述】:

我在 txt 中有这样的东西

[[asdfg]] [[abcd|qwerty]]

连续,但我希望它看起来像那样

 [[asdfg]] [[qwerty]]

在尝试搜索时使用通配符 ( [[.*\| ) 会导致查找到 "|" 的整行不允许它之间有空格应该可以,但我不知道该怎么做。

编辑 1

它来自维基百科转储,所以第一部分是单词的基本形式,第二部分是它如何适合句子。 [[I]] [[be|was]] [[at]] [[the]] [[doctor]]之类的东西,我想把它改成正常的句子

[[I]] [[was]] [[at]] [[the]] [[doctor]]

编辑 2

我找到了一些解决方案。我只是将每个单词都放在一个新行中,执行第一个正则表达式,然后删除换行符。不过这确实有点搞砸了我的间距......

【问题讨论】:

  • 是否应该始终找到相同/重复的字符,例如 c'|ca'|a
  • 没有。它来自维基百科转储,所以第一部分是单词的基本形式,第二部分是它如何适合句子。类似 [[I]] [[be|was]] [[at]] [[the]] [[doctor]] 的东西。我想把它改成正常的句子。
  • 应该如何替换[[I]] [[be|was]] [[at]] [[the]] [[doctor]]
  • [[I]] [[was]] [[at]] [[the]] [[doctor]] 其余的格式对我来说是显而易见的。
  • 你写了.*\w+ 更合适。或者至少做到non-greedy:.*?

标签: regex notepad++ wildcard


【解决方案1】:

试试这个正则表达式:

\[\[\w+\|(\w+)\]\]

替换为:

[[$1]]

确保在 Notepad++ 中单击 Replace All 之前选择底部的 Regular expression

【讨论】:

  • 它说找不到文本。
  • 它应该会找到与 [[c'|c]] 类似的任何内容。在点击Replace All之前,您是否选择了底部的Regular expression
  • 虽然我对代码不够清楚...这不是真正的 c'|c 这是两个不同的词。对不起。
  • 这是我的荣幸
【解决方案2】:

您可以像这样一次性完成所有操作

\[{2}(?:(?!\]{2}).)+?\|([^\]]+)

这需要替换为

[[$1

a demo on regex101.com


分解这个说:
\[{2}             # match [[
(?:(?!\]{2}).)+?  # do not overrun ]]
\|                # |
([^\]]+)          # capture anything not ] into group 1

之后,您只需替换开括号和$1组的内容

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多