适当的正则表达式选择字符串中的文本?

时间:2014-02-14 21:42:56

标签: regex matlab

假设我有这些字符串:

row - 1: First_s - end

row - 2: Second_s - end

...

row - 400: string_400 - end

我想使用matlab函数regexp来选择:- end之间的任何非白色字符。因此,在我的示例中,它将选择First_s Second_s string_400等。适当的正则表达式是什么样的?

4 个答案:

答案 0 :(得分:2)

不是前瞻和后瞻,而是匹配引导和追踪令牌的字符串:

>> Cs = regexp(strings,':\ (.*)\ - end','tokens');
>> Cs{1}{1}
ans = 
    'First_s'
>> Cs{2}{1}
ans = 
    'Second_s'
>> Cs{3}{1}
ans = 
    'string_400'

答案 1 :(得分:1)

使用严格的lookbehind和lookahead:(?<=: ).+?(?= - end)

答案 2 :(得分:1)

使用regexprep无需替换不需要的部分:

strings = {
'row - 1: First_s - end';
'row - 2: Second_s - end';
'row - 400: string_400 - end'}; %// example data. Assumed to be a cell array

strings = regexprep(strings,'.*:','') %// remove start
strings = regexprep(strings,'- end$','') %// remove end
strings = regexprep(strings,'\s','') %// remove spaces

此示例中的结果是:

strings = 

    'First_s'
    'Second_s'
    'string_400'

答案 3 :(得分:0)

这是与ruby一起使用的正则表达式:row\s\-\s[\d]+\:\s(.*)\s-\send,它可能也适用于matlab。

您可以在此处查看此示例的工作原理:http://rubular.com/r/FuPwNcBy1I