正则表达式:替换匹配项中的字符。不管它处于什么地位

regex: Replace a character in a match. No matter what position it has

我有一个 ASCII table 看起来像这样:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| |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 中导入此文件),但它们不是。

我想用空白替换它们space,但我的问题是我不知道“|”的确切位置。我只知道 '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 个字符的字符串。在那场比赛中替换任何管道“|”。但是,这不是正确的用法,但我不知道该怎么做。

你可以用 Notepad++ 做到这一点

假设字段长度固定

  • Ctrl+H
  • 查找内容:(?:^.{85}\K|\G)(.*?)\|(?=.{39,})
  • 替换为:</code></li> <li><em>选中环绕</em></li> <li><em>检查正则表达式</em></li> <li><em>不勾选<code>. matches newline
  • 全部替换

解释:

(?:         : 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

替换:

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