regex - 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
。我不知道为什么。任何帮助都会很棒。谢谢。
解决方案
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')
推荐阅读
- c++ - 在 C++ 中寻找排列和组合
- laravel - 如何在登录时自定义 laravel 护照错误?
- javascript - 如何使用 Javascript dom 编辑 html 元素?
- javascript - 如何在 Native File System API 中读取文件内容
- linux - 如何在终端中使输入和输出颜色不同?
- javascript - 如何通过连接所有字符串来折叠数组,但保留对象
- python - 在 Python 中从 LastFM API 处理日期
- python - 使用 pip 时找不到匹配的分布
- python - 导入 Tensorflow 时内核死机
- python - 使用 subprocess.run() 后是否必须关闭标准输出