使用正则表达式在字符之间跳过第二个字符串

时间:2016-08-17 03:58:42

标签: regex notepad++

我一直在处理正则表达式问题。我有很多行格式如下:

3240985|#Apple.-+240538|34346|346356356|36433565|6agf8s89auf

最终目标应如下所示:

#Apple.-+240538|6agf8s89auf

#Apple.-+240538是随机字符,6agf8s89auf是随机字母数字字符。

我一直在使用(.*?)[\|]并用Notepad ++中的空白字符替换我需要的部分,但是这样就不可能用我拥有的行数来完成它。

2 个答案:

答案 0 :(得分:1)

此类字符串的正则表达式为(?:(?<=^)|(?<=\|))(\d+(?:$|\|))

演示:https://regex101.com/r/sO0fZ2/2

然而,Notepad ++中的查找和替换可能存在一些问题,因为Notepad ++仅查找和替换字符串一次。其他一些文本编辑器,如sublime文本以递归方式查找和替换内容。但是,您可以通过多次单击“全部替换”按钮来简单地解决此问题。

输入

Input Notepad++

点击“在所有已打开的文档中全部替换”两次后

结果

Output Notepad++

在崇高文本中,您可以通过单击实现此目的:

输入

Input Sublime Text

结果

Output Sublime Text

P.S。:我不知道Notepad ++中是否有任何功能可以递归地查找和替换内容。你可以google。如果有这样的功能,那么你可以使用它。但是,我认为这不应该是一个问题,因为它只需要几次点击。

答案 1 :(得分:0)

有一种简单的方法,交替

^\d+\||\|\d+(?=\||$)

<强>详情:

  • ^\d+\| - 分支1在字符串的开头(\d+)匹配一个1+位(^)的大块,在它们之后的|
  • | - 交替运算符含义 OR
  • \|\d+(?=\||$) - 一个文字管道(\|,必须进行转义),其后面有1位数(\d+),后跟文字管道或字符串结尾({{ 1}}是一个积极的前瞻,不会推进正则表达式索引,因此,你仍然可以匹配相同模式的相邻匹配。)

enter image description here