删除任何非单词字符,但是空格和单词中的单个引用



想要清理一些文本。因此,是否要删除除ws以外的任何内容,但也希望将单个'保留在单词中。(例如,想要用don't

等单词保留它

我可以做

perl -plE "s/[^ws']//g" <<< "'a:b/c d????ef' don't"

保持',但它也将其保持在字符串的开始或结尾处,例如它打印

'abc def' don't

我无法实现保持此 (?<w)'(?=w),例如。删除',除非两个字符之间。

想要的结果:

abc def don't

如何做?

您可以做到这一点:

s/[^ws']|(?<!w)'|'(?!w)//g

删除所有内容

  • 一个不是(单词字符,空间或 '(或
  • 的字符
  • '之前没有单词字符或
  • '不遵循单词字符

第一个子句将匹配(并删除(我们显然不想保留的所有字符。

第二子句和第三子句将删除所有'字符,除非两侧都被单词字符包围。

您也可以使用全球研究而不是替换,这样您只需要描述要保留的内容,而模式变得更加简单:

perl -ne"print /[ws]|b'b/g" <<< "'a:b/c d????ef' don't"

相关内容

最新更新