首页 > 解决方案 > regexprep 函数无法接受 \b 来查找数字范围

问题描述

我正在尝试对以下类型的字符串使用正则表达式替换:

'y = 0'
'y = 10'
'y = 23'

我希望替换只返回介于 1 和 22 之间的数字。(即小于 1 和大于 22 将返回一些其他结果)

我把它写成如下,我不明白为什么这不起作用:

regexprep('y = 5', 'y = '\b([1-9]$|1[0-9]|2[0-2])\b', '$1')

我在这里的语法有什么遗漏吗?我发现如果我删除\b我可以获得正确的结果:

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])', '$1')

即没有变化,对于 1-22 的数字,我得到了正确的结果,但是所有大于 22 的数字也将被替换$1。我不知道为什么。任何帮助都会很棒。谢谢。

标签: regexstringmatlabreplace

解决方案


regexprep(y = 5', 'y = '\b([1-9]$|1[0-9]|2[0-2])\b', '$1')

这不是字符串的合法 MATLAB 语法。它们需要包含在单引号中。但这可能只是一个错字。真正的问题是 MATLAB 正则表达式中的 \b 表示退格,而不是传统正则表达式中的空白。

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])', '$1')

这需要一个行尾 $。

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])$', '$1')

更好的是,允许灵活的间距:

regexprep('y = 0', 'y\s*=\s*([1-9]|1[0-9]|2[0-2])$', '$1')

推荐阅读