想要清理一些文本。因此,是否要删除除w
和s
以外的任何内容,但也希望将单个'
保留在单词中。(例如,想要用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"