matlab正则表达式:单词以空格'\< \ s。* \ s \>'开头和结尾

时间:2015-03-20 18:20:01

标签: regex matlab

在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。

有什么想法吗?感谢。

1 个答案:

答案 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),因为空格提供了单词边界。