EditPad RegEx ...我迷路了

时间:2013-02-01 15:07:55

标签: regex replace backreference editpad

我正在尝试使用正则表达式进行另一次查找/替换,并且我有一些奇怪的角色,我正在绊倒。


总结:
某些行(在此克拉分隔文件中)在peren的(“(S)”或“(N)”)之后的部件号中有一个或两个特定标记,我需要把它移到PN之前 注意:对于同时包含(S)和(N)的行,它将始终按顺序排列:(S)(N)


主题:

  

^ 901A-123 ^ DESC,OF,PROD,AND,STUFF ^ $ 28.87 ^ $ 23.10 ^^ - ^^ - ^^
  ^ 123B-C45(N)^ DESC,OF,PROD,AND,STUFF ^ $ 1,224.87 ^ $ 1,041.10 ^^ - ^^ - ^^
  ^ 333-11(S)(N)^ DESC,OF,PROD,AND,STUFF ^ $ 510.67 ^ $ 459.50 ^ $ 382.90 ^ 2 ^ $ 357.40 ^ 4 ^^
  ^ 333-987M-88(S)^ DESC,OF,PROD,AND,STUFF ^ $ 608.77 ^ $ 547.90 ^ $ 456.50 ^ 2 ^ $ 426.10 ^ 4 ^^


我尝试过的事情:
我开始尝试像^(.+)\(N\)^^([A-Za-z0-9]+)\(N\)^之类的东西,但很快就开始怀疑^(克拉)是否使事情变得复杂,所以我尝试逃避它。
这似乎没有什么区别:) 接下来我尝试将所有克拉改为管道:

  

| 901A-123 | DESC,OF,PROD,AND,STUFF | $ 28.87 | $ 23.10 || - || - ||
  | 123B-C45(N)| DESC,OF,PROD,AND,STUFF | $ 1,224.87 | $ 1,041.10 || - || - ||
  | 333-11(S)(N)| DESC,OF,PROD,AND,STUFF | $ 510.67 | $ 459.50 | 382.90 $ | 2 | $ 357.40 | 4 ||
  | 333-987M-88(S)| DESC,OF,PROD,AND,STUFF | $ 608.77 | $ 547.90 | 456.50 $ | 2 | $ 426.10 | 4 ||

...用|([A-Za-z0-9]+)\(N\)|搜索,现在我正在......等待...... 没有:)


目标:
虽然现在我对找出Find的小胜利感到高兴,但最终目标是用PN的反向引用替换。
目标是使主题看起来像这样:

  

^ 901A-123 ^ DESC,OF,PROD,AND,STUFF ^ $ 28.87 ^ $ 23.10 ^^ - ^^ - ^^
  (N)^ 123B-C45 ^ DESC,OF,PROD,AND,STUFF ^ $ 1,224.87 ^ $ 1,041.10 ^^ - ^^ - ^^
  (S)(N)^ 333-11 ^ DESC,OF,PROD,AND,STUFF ^ $ 510.67 ^ $ 459.50 ^ $ 382.90 ^ 2 ^ $ 357.40 ^ 4 ^^
  (S)^ 333-987M-88 ^ DESC,OF,PROD,AND,STUFF ^ $ 608.77 ^ $ 547.90 ^ $ 456.50 ^ 2 ^ $ 426.10 ^ 4 ^^


任何和所有指针/建议都是受欢迎的。

3 个答案:

答案 0 :(得分:1)

  • ^|都是需要转义的元字符。
  • 您的角色等级[A-Za-z0-9]+不包含短划线。

所以,试试这个:搜索

(\^[A-Za-z0-9-]+)((?:\(S\))?(?:\(N\))?)

并替换为

\2\1

答案 1 :(得分:1)

搜索:

^(.*?)(\((S\)\(N|S|N)\))(.*?)$

替换为:

$2$1$4

由于我使用^$锚定了模式,因此您必须分别在每行上应用此正则表达式或使用多行标记。

这是working demo

答案 2 :(得分:0)

很遗憾,您正在与特殊字符作斗争:^()|。 你需要逃避所有这些。所以你可以使用这个正则表达式(见in action):

\^([^\^]+?)(\(S\))?(\(N\))?(\^.*)

并替换为:

$2$3^$1$4

我认为只有在第一个标记后才有(S)(N)。输出如下:

^901A-123^DESC,OF,PROD,AND,STUFF^$28.87^$23.10^--^--^--^--^^
(N)^123B-C45^DESC,OF,PROD,AND,STUFF^$1,224.87^$1,041.10^--^--^--^--^^
(S)(N)^333-11^DESC,OF,PROD,AND,STUFF^$510.67^$459.50^$382.90^2^$357.40^4^^
(S)^333-987M-88^DESC,OF,PROD,AND,STUFF^$608.77^$547.90^$456.50^2^$426.10^4^^

说明

正则表达式:

\^               #            match '^' character
([^\^]+?)        # group 1  : match any char other than '^' one or more times, non-greedy
(\(S\))?(\(N\))? # group 2-3: match "(S)" and/or "(N)" or none of them
(\^.*)           # group 4  : match '^' and then everything

的更换:

$2$3^$1$4        # concatenate group 2, then 3 and 1 and 4 after a '^' character