regexprep向后看,错误或预期美元?

4视图(30天)
这个问题处理regexprep和并且运营商。
假设你有
YourCell = {“2016-11-22 00:00:00.8”;“2016-11-22 00:00:00.9”;“2016-11-22 00:00:01”};
你想要自动添加类似”。0' to the case that does not end in period followed by a digit .
NewCell = regexprep (YourCell,“美元(:\ \ d)”,1.0美元的,“lineanchors”)
将匹配的方法结肠紧随其后的是两个数字作为一个群体,其次是行结束,组代替组0紧随其后。在regexprep替换1美元意味着“第一分组对象”。所以我们知道能做的任务。
但是当我正在调查,我采取了不同的策略,并且运营商。那是我决定寻找行尾 接着通过(期间跟随一个数字),和行结束我将替代”。0”。
regexp look-behind-for-match运营商/ regexprep(? < =表达式)和look-behind-for-non-match操作符(? < !表达式)。这些都是记录在 //www.tianjin-qmedu.com/help/matlab/ref/regexp.html input_argument_expression “看看断言”一节。因此,在我看来,我应该能够使用
regexprep (YourCell“(? < ! \ \ d)。美元的,“0”,“lineanchors”)
regexprep (YourCell“美元(? < ! \ \ d。)”,“0”,“lineanchors”)
但是,没有更换。
后面找了错误的吗?我们可以测试通过陈美元:
regexprep (YourCell“(? < ! \ \ d):“,“0”,“lineanchors”)
ans =
3×1细胞数组
“2016-11-22 00.000.000.8”
“2016-11-22 00.000.000.9”
“2016-11-22 00.000.001”
和观察,我们会更换冒号(不发生进展期和数字)与目标字符串。我们可以检查并且是否被忽视
regexprep (YourCell“(? < !:\ \ d):“,“0”,“lineanchors”)
ans =
3×1细胞数组
“2016-11-22 00.000:00.8”
“2016-11-22 00.000:00.9”
“2016-11-22 00.000:01”
看到这个模式实际上是积极使用,结肠时才匹配 与colon-digit-digit之前。因此,并且是有效的。
是行尾锚问题?
regexprep (YourCell“美元(\ d)”,1.0美元的,“lineanchors”)
ans =
3×1细胞数组
“2016-11-22 00:00:00.8.0”
“2016-11-22 00:00:00.9.0”
“2016-11-22 00:00:01.0”
不,唯一匹配数字的最后一行,行锚是正确匹配。
困难只发生在你并且结合锚。^锚的问题发生,可以探索
regexprep (YourCell(^)(? = \ d) ',1.0美元的,“lineanchors”)%什么也没发生!
regexprep (YourCell(-)(? = 2)',1.0美元的,“lineanchors”)%的作品
regexprep (YourCell' ^ (2)',1.0美元的,“lineanchors”)%的作品
问题然后预计是否会同line-anchors并且不工作,或者如果这是一个MATLAB的缺陷吗?
虽然我确实看到线锚工作如果至少有一个真正的字符相匹配:
regexprep (YourCell“^ (? = 2)。*’,“BLOB”,“lineanchors”)%,替代品
regexprep (YourCell“^ (? = 3)。*’,“BLOB”,“lineanchors”)%没有替换,这是正确的
你可以看到,我向后插入通过测试工作
正则表达式(YourCell”。(? < ! \ \ d)的美元,“匹配”,“lineanchors”)
ans =
3×1细胞数组
{}
{}
{1×1细胞}
> > ans {3}
ans =
细胞
' 1 '
看起来一个成功匹配的任意表达式是不触发当我认为它应该更换。
5个评论
每•艾萨克森
每•艾萨克森 2016年12月3日
编辑:每•艾萨克森 2016年12月3日
@Walter,没有阅读 “不要这样做在一个会话未保存的工作” 我试着用几个未保存的文件代码。这是愚蠢的!无论是Cntrl + C也 暂停 有任何效果。
好消息:
  • Matlab中的文件之间切换编辑和复制粘贴notepad++仍然工作(R2016a)。
  • 保存,保存所有才能在工具条保存文件(R2016a)。

登录置评。

接受的答案

每•艾萨克森
每•艾萨克森 2016年12月3日
编辑:每•艾萨克森 2016年12月3日
预计,与“$”不匹配一个或多个字符的字符串。这是
regexprep (YourCell“(? < ! \ \ d)。美元的,“0”,“emptymatch”)
ans =
“2016-11-22 00:00:00.8”
“2016-11-22 00:00:00.9”
“2016-11-22 00:00:01.0”
2的评论
Stephen23
Stephen23 2016年12月3日
编辑:Stephen23 2016年12月3日
@per•艾萨克森:很好地抓住了。 emptymatch 是唯一的选择,我不习惯,这给了我一个很好的借口玩一些……学习永远不会停止:)

登录置评。

更多的答案(0)

类别

找到更多的在字符和字符串帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!