文本文件abc.txt
是从网上抓来的任意文章。例如,如下所示:
他的名字叫“ Donald”,他喜欢汉堡。他于12月11日结婚。
除了以上文章中的各种句点和引号,我只想提取小写和数字的单词。在上述示例中:
{他的名字叫唐纳德(Donald),他喜欢汉堡,12月11日,他结婚了}
我的代码如下:
filename = 'abc.txt';
fileID = fopen(filename,'r');
C = textscan(fileID,'%s','delimiter',{',','.',':',';','"','''});
fclose(fileID);
Cstr = C{:};
Cstr = Cstr(~cellfun('isempty',Cstr));
除了所有符号之外,是否有任何简单的代码可以仅提取字母单词和数字?
答案 0 :(得分:1)
要将某些单词转换为小写字母,必须执行两个步骤。
regexprep将位于字符串开头或后跟句号和空格的单词转换为小写。
在regexprep
函数中,我们使用以下模式:
(?<=^|\. )([A-Z])
表示:
(?<=^|\. )
我们要断言,在感兴趣的单词之前,是字符串(^
或(|
)的开始,后跟句号(.
)通过空格找到。这种构造称为向后看。([A-Z])
表达式的这一部分匹配并捕获(存储匹配项)大写字母(A-Z
)。正则表达式中的${lower($0)}
组件称为动态表达式,并将捕获的组(([A-Z])
)的内容替换为小写。此语法特定于MATLAB语言。
您可以检查以上表达式here的行为。
发生小写转换后,regexp将查找所有出现的一个或多个数字,小写字母和大写字母。
模式[a-zA-Z0-9]+
匹配小写字母,大写字母和数字。
您可以检查此正则表达式here的行为。
text = fileread('abc.txt')
data = {regexp(regexprep(text,'(?<=^|\. )([A-Z])','${lower($0)}'),'[a-zA-Z0-9]+','match')'}
>>data{1}
13×1 cell array
{'his' }
{'name' }
{'is' }
{'Donald' }
{'and' }
{'he' }
{'likes' }
{'burger' }
{'on' }
{'December'}
{'11' }
{'he' }
{'married' }