1

我正在尝试用正则表达式进行另一个查找/替换,并且我有一些奇怪的字符,我被绊倒了。


摘要:
某些行(在此克拉分隔的文件中)在 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\)^and之类的东西^([A-Za-z0-9]+)\(N\)^,但很快就开始怀疑 ^(carat) 是否使事情复杂化,所以我试图逃避它。
这似乎没有什么区别 :)
所以接下来我尝试将所有克拉改为管道:

|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^^


欢迎任何和所有指针/建议。

4

3 回答 3

1
  • ^两者|都是需要转义的元字符。
  • 您的角色类[A-Za-z0-9]+不包括破折号。

所以,试试这个:搜索

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

并替换为

\2\1
于 2013-02-01T15:14:55.987 回答
1

搜索:

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

用。。。来代替:

$2$1$4

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

这是一个工作演示

于 2013-02-01T15:19:10.883 回答
0

不幸的是,您正在与特殊字符战斗:^, (), |。您需要逃脱所有这些。所以你可以使用这个正则表达式(见实际操作):

\^([^\^]+?)(\(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
于 2013-02-01T15:18:14.887 回答