2

我有一个如下所示的 ASCII 表:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |NUMBR |IDENT     |YEAR |STS  |WHES |APA  |TAMS |AMOUNT          |ANOTHERAM       |DESCIB                                             |ACCO       |NUM         |ID          |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515|What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION|084112-378515-What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING|INFORMATION 084112-378515-What. Estimation|000038780  |            |0001038780  |

我的问题是,在“DESCIB”列中,有时会像分隔符一样处理管道(如果我在 python 中导入此文件),但它们不是。

我想用空格替换它们,但我的问题是我不知道“|”的确切位置。我只知道'DESCIB' 列有 51 个字符长。

我在 Notepad++ 中尝试了正则表达式,但我不知道该怎么做。

最终结果应如下所示:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |NUMBR |IDENT     |YEAR |STS  |WHES |APA  |TAMS |AMOUNT          |ANOTHERAM       |DESCIB                                             |ACCO       |NUM         |ID          |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515 What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515-What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515-What. Estimation|000038780  |            |0001038780  |

先感谢您。

@EDIT:我起初尝试过,但问题是我必须知道“|”的位置:

(\*.{33})\|(.{15}\|)

然后我尝试了这样的事情:(\*.{50})(?![|]) 它背后的想法是:寻找一个以“*”开头并有另外 50 个字符的字符串。在该匹配中替换任何管道“|”。但是,这不是正确的用法,但我不知道该怎么做。

4

1 回答 1

1

你可以用记事本++做到这一点

假设字段是固定长度的

  • Ctrl+H
  • 找什么:(?:^.{85}\K|\G)(.*?)\|(?=.{39,})
  • 用。。。来代替:$1
  • 检查环绕
  • 检查正则表达式
  • 不要检查. matches newline
  • Replace all

解释:

(?:         : start non capture group
  ^         : beginning of line
  .{85}     : 85 any charcater but newline
  \K        : forget all we have seen until this position
 |          : OR
  \G        : continue searching from position of last  match
)           : end group
(.*?)       : group 1, 0 or more any character, not greedy
\|          : a pipe
(?=.{39,})  : positive lookahead, at least 39 character

替代品:

$1          : content of group 1, followed by a space

给定示例的结果:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |NUMBR |IDENT     |YEAR |STS  |WHES |APA  |TAMS |AMOUNT          |ANOTHERAM       |DESCIB                                             |ACCO       |NUM         |ID          |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515 What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515-What. Estimation|000038780  |            |0001038780  |
| |99    |5471140100|2174 |002  |31   |S    |T    |         245,42 |         245,42 |*SOMEING INFORMATION 084112-378515-What. Estimation|000038780  |            |0001038780  |
于 2018-07-04T09:38:07.473 回答