替换除多个匹配项之外的所有内容

问题描述 投票:0回答:1

我有一个像这样的字符串:

"This is some text.|Some more text.|Some other text.|Some different text."

我想要实现的是选择所有不符合这些条件的文本:

  1. 从行首选择前 n 个字符。
  2. 每次|之后选择前 n 个字符。

如果我设置 n=10 我应该得到这个选择:

"me text.|text.| text.|rent text."

最终目标是将所选文本替换为空, 这样剩下的就是:

"This is so, Some more , Some other, Some diffe"

到目前为止,我已经选择了要保留的文本,但不幸的是我需要替换不需要的文本。

我希望这是可行的。

这是我的正则表达式的当前状态:

^(.{20})|(\|)(.{20})

它为我提供了文本本身(包括 | ) 而且我还没有设法采用迄今为止我在问题上发现的内容。

string regex-negation
1个回答
1
投票

您可以使用捕获组和否定字符类,不包括匹配管道。

([^\n|]{10})[^\n|]*(?:\||$)

模式匹配:

  • (
    捕获第 1 组
    • [^\n|]{10}
      重复 10 次匹配换行符以外的字符或
      |
  • )
    关闭第 1 组
  • [^\n|]*
    匹配除换行符或
    |
  • 之外的可选字符
  • (?:\||$)
    匹配
    |
    或字符串末尾

正则表达式演示

在替换使用组 1 中,但请注意,如果您正在进行单个替换,则会有一个尾随逗号和一个空格,您在处理和删除后将拥有这些逗号。

$1, 

输出

This is so, Some more , Some other, Some diffe, 

另一个想法是在

|
上进行分割,然后循环分割结果,取前 10 个字符,并用
, 

将结果连接回来
© www.soinside.com 2019 - 2024. All rights reserved.