我知道使用命名组替换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
等正常捕获匹配,但不能作为命名令牌。
答案 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功能都存在,但似乎仍然不支持。