根据前缀从字符串中删除单词

Delete words from string based on prefix

我有一个变量 "comments",它只是用户的个人评论。他们是一些敏感的词,比如他们的用户名,我需要从字符串中删除。所有用户名都以相同的前 3 个字母开头,但随后不同,并且所有用户名的长度均为 8 个字符。我试图找出一种方法从字符串中删除所有用户名,但我没有运气。如果它们出现的话,它们会出现在每个字符串的不同位置。我的第一个想法是使用 TRANSWRD() 但我不认为我可以使用带有通配符的 SAS 函数。有人知道解决方案吗?非常感谢您的宝贵时间!

我会为此使用 PERL 正则表达式,它们具有非常强大的搜索条件,可以满足您的需要。下面的示例仅从字符串中删除第 3 个和第 4 个单词,即仅删除具有确切条件的单词。

data test;
input comments .;
regexid = prxparse('s/abc\w{5}\b//'); /* search for 'abc' followed by any 5 characters, followed by a word boundary (i.e. a space) */
call prxchange(regexid,-1,comments); /* remove usernames */
datalines;
abc abc123 abc12345 abc98765 abc123456
;
run;