在matlab中,使用'\< \ s; * \ s \>'
查找以空格开头和结尾的单词命令:
str = 'A body or collection of such stories s@@5%%suchstro end';
regexp(str, '\<\s.*\s\>', 'match')
结果不返回任何内容。
然而,Octave中的相同命令返回:'这些故事的正文或集合s @@ 5 %% suchstro'
'\<\s.*?\s\>'
也适用于Octave,但不适用于matlab。
有什么想法吗?感谢。
答案 0 :(得分:0)
\<\s.*?\s\>
读作:单词的开头,空格,任何内容,空格,单词结尾。但是一个单词不能以空格开头,所以这个模式与任何东西都不匹配。
模式\s\<.*?\>\s
返回
` body or collection of such stories s@@5%%suchstro `
这可能不是你想要的。这不是一个单词的集合,而是一切,因为匹配是贪婪的。让它变得懒惰:
regexp(str, '\s\<?.*?\>\s', 'match')
' body ' ' collection ' ' such ' ' s@@5%%suchstro '
另外,你不想捕捉这些空间,对吗?为他们使用前瞻和后瞻:
regexp(str, '(?<=\s)\<?.*?\>(?=\s)', 'match')
'body' 'or' 'collection' 'of' 'such' 'stories' 's@@5%%suchstro'
最后...... s @@ 5 %% suchstro可能不是一个字,是吗?也许您需要\w
,单词字符代替\.
regexp(str, '(?<=\s)\<?\w*?\>(?=\s)', 'match')
'body' 'or' 'collection' 'of' 'such' 'stories'
在这种形式中,懒惰/贪婪的区别不再是问题,因此表达式可以简化为(?<=\s)\<\w*\>(?=\s)
或甚至简化为(?<=\s)\w*(?=\s)
,因为空格提供了单词边界。