正则表达式:替换匹配项中的字符。不管它处于什么地位
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 |
我有一个 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 |