在Matlab中使用sscanf从字符串中读取

时间:2014-09-15 23:06:45

标签: string matlab scanf

我正在尝试以特定格式读取字符串

<ahref="/teams/spain/real-sociedad-de-futbol/2028/">RealSociedad</a>

这是字符串的一个示例,我想要提取的是团队的名称。

我尝试过这样的事情,

houseteam = sscanf(str, '<ahref="%*s">%s</a>');

但它不起作用,为什么?

2 个答案:

答案 0 :(得分:1)

您可以像上面的帖子一样使用regexprep为您执行此操作。即使您的帖子说要使用sscanf以及帖子中的评论,您也希望使用regexprep完成此操作。您必须使用两个嵌套的regexprep调用来执行此操作,并且您可以检索团队名称(即RealSociedad),因为str采用您提供的格式:

str = '<ahref="/teams/spain/real-sociedad-de-futbol/2028/">RealSociedad</a>';
houseteam = regexprep(regexprep(str, '^<a(.*)">', ''), '</a>$', '')

这看起来非常令人生畏,但让我们解决这个问题。首先,看看这个陈述:

regexprep(str, '^<a(.*)">', '')

regexprep的工作原理是指定要分析的字符串,要搜索的模式,以及要替换此模式的内容。我们正在寻找的模式是:

^<a(.*)">

这表示您正在寻找字符串开头以a<开头的模式。在此之后,(.*)">正在执行贪心评估。这就是说我们要找到最长字符序列,直到我们找到">的字符。因此,正则表达式将匹配的是以下字符串:

<ahref="/teams/spain/real-sociedad-de-futbol/2028/">

然后我们用空字符串替换它。因此,第一个regexprep调用的输出将是:

RealSociedad</a>

我们希望摆脱</a>字符串,因此我们会在字符串末尾查找regexprep进行另一次</a>调用,然后将其替换为空白的字符串又来了。因此,您正在寻找的模式是:

</a>$

美元符号($)表示此模式应在字符串的末尾显示为。如果我们找到这样的模式,我们将用空字符串替换它。因此,我们最终得到的是:

RealSociedad

答案 1 :(得分:0)

找到解决方案。因此,%s在找到空格时会停止。

    str = regexprep(str, '<', ' <');
    str = regexprep(str, '>', '> ');
    houseteam = sscanf(str, '%*s %s %*s');

这将在我想要的字符串之间创建一个空格。