REGEX:在Octave上使用命名组替换字符串

时间:2014-02-25 23:42:00

标签: regex matlab octave

我知道使用命名组替换String中的模式的Pythonic方法:

r"(?P<p>(\.+))".sub(r' \g<p> ', 'test sentence..')

是否可以在Octave上进行(我使用的是v3.8.0)?我尝试了一些变化,如下所示,但没有成功。

regexprep('test sentence..', '(?<p>(\.+))', ' \k<p> ')
regexprep('test sentence..', '(?<p>(\.+))', ' $<p> ')

您可能已经注意到,这个简单的示例着重于捕获String '..'并在其前后添加空格。

Input: 'test sentence..'
Expected Output: 'test sentence .. '
Group Match: p = '..'

我可以使用$1$2等正常捕获匹配,但不能作为命名令牌。

1 个答案:

答案 0 :(得分:0)

有了@horchler的帮助,我们已经缩小了问题范围,似乎只有Octave提出了所描述的问题。从Octave文档中,我们有:

  

内置函数:outstr = regexprep(string,pat,repstr)内置   功能:outstr = regexprep(string,pat,repstr,“opt1”,...)   用repstr替换字符串中模式pat的出现次数。

     

该模式是regexp记录的正则表达式。看到   正则表达式。

     

替换字符串可能包含$ i,它替代第i个   匹配字符串中的括号集。例如,

      regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1') returns "Dunn, Bill"
     

除了正则表达式之外的选项

     

'once'仅替换结果中第一次出现pat。   'warnings'此选项存在兼容性但被忽略。

因此,他们没有像MATLAB文档那样提及对Named Tokens的任何支持。这让我相信当前版本的Octave不支持它们以及regexprep功能。据我所知,Octave开发人员主要关注的是确保所有MATLAB功能都存在,但似乎仍然不支持。