我正在尝试使用正则表达式进行另一次查找/替换,并且我有一些奇怪的角色,我正在绊倒。
的总结:
某些行(在此克拉分隔文件中)在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 ^^
任何和所有指针/建议都是受欢迎的。
答案 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