在文本文件中搜索解析行

问题描述

我正在使用 Octave,但由于 Matlab 答案也可能有效,因此我在此问题中添加了两个标签。这里是: 我试图在文本文件中找到这个特定的字符串:

</table>  
</td>

你可以看到如果你复制粘贴它,有一个解析行。我不知道如何搜索它。显然这不起作用:

separator_index = strfind(s,</table>
</td>);

我曾尝试使用 strtrim 去掉 txt 文件中的空格,但由于某种原因,输出文件与原始文件完全相同...

感谢您的帮助!

解决方法

八度

您的字符串包含两个空格和一个文字换行符(即十进制的 ascii 字符数字“10”,或十六进制的“0a”)。

如果将字符串转换为双精度,您可以发现这一点。

要重新创建该字符串,您需要使用双引号;与不“解释”转义序列的单引号相比,双引号可以。请注意,这是八度独有的; matlab 对单引号和双引号的处理非常不同。

因此这将起作用:

strfind( s,"</table>  \n</td>" )

但这不会:

strfind( s,'</table>  \n</td>' )

Matlab

如果你想要一个与 matlab 兼容的解决方案,你只需要玩转转义序列,看看它们是否有效。保证生成正确字符串的一种方法是将其从数字字符序列转换为字符串,即

s = char([ 60,47,116,97,98,108,101,62,32,10,60,100,62 ]);

然后使用它来查找您的匹配项。

,

根据您的输入,搜索 \r(回车)或 \n(换行)。

还要确保模式包含在双引号 " 中,而不是单引号 ' 中。否则,不会解释 \r \n 转义序列。

separator_index = strfind(s,"</table>  \n</td>") % either \n newline
separator_index = strfind(s,"</table>  \r</td>") % or \r carriage return

编辑:Tasos 关于尾随空格和双引号的很好的捕获。已更正。