如何在MATLAB中从字符向量中提取特定单词?

如何在MATLAB中从字符向量中提取特定单词?,matlab,Matlab,如何在MATLAB中从字符向量中提取特定单词? 我正在努力解决这个问题。我只想从该字符向量中获取城市名称: myText = 'Vienna 2.7 Gallen 3.8 Zurich 0.9 Lugano 2.8 Rome 12.1 Paris 9.2' 可以使用以下方法将字符串拆分为字符串向量: cities = split(myText); 然后仅为名称编制索引: cities = cities(1:2:end); 然后您可以简单地运行它: listOfNames

如何在MATLAB中从字符向量中提取特定单词? 我正在努力解决这个问题。我只想从该字符向量中获取城市名称:

myText = 'Vienna 2.7  Gallen  3.8  Zurich 0.9    Lugano 2.8   Rome 12.1   Paris 9.2'

可以使用以下方法将字符串拆分为字符串向量:

cities = split(myText);
然后仅为名称编制索引:

cities = cities(1:2:end);
然后您可以简单地运行它:

listOfNames = extractName(myText);

这个词可以处理几个单词旧金山,泰恩河畔纽卡斯尔,包括海中的破折号卡梅尔,撇号L'Quiela或Dothe South-GalEn空间。它假定名称由字母、破折号、空格或撇号以外的任何字符分隔,并且数字永远不会以点结尾:

result = strtrim(regexp(myText, '([a-zA-Z\- '']|\. )+', 'match'));
例如:

>> myText = 'San Francisco 2.7  Newcastle upon Tyne  3.8  Carmel-by-the-sea 0.9    L''Aquila 2.8  St. Gallen';
>> result = strtrim(regexp(myText, '([a-zA-Z\- '']|\. )+', 'match'))  
result =
  1×5 cell array
    {'San Francisco'}    {'Newcastle upon Tyne'}    {'Carmel-by-the-sea'}    {'L'Aquila'}    {'St. Gallen'}

不知道拆分功能。尼斯+1我想不出[a-z_a-z]+这个词,所以非常感谢!下面的代码也可以工作:[match,~]=regexpmyText,[a-zA-Z]*','match','split';很好的回答:可能是我最好的+1,我错过了两次“拆分”,但我更喜欢你的答案,因为它更健壮、更精确。为什么不使用listOfWords=regexpmyText、“[a-z_a-z]+”、“match”并避免deleteLat部分?这是出于某种原因吗?@LuisMendo:因为我想我对正则表达式不是很在行。;因此,我使用\s来拆分单词,但您的解决方案使其变得不必要;所以我的首选解决方案可能是extractName=@myText regexpmyText,“[a-z_a-z]+”,“match”+从我这里得到1。P.S.:根据要求,一个函数可能不需要。旧金山或Dang-HAG的几个词可以在这个字符串中吗?是的,这是可能的!你可以用一点“无法忍受的光芒”来摆脱strtrim,我知道这是可以做到的。。。但是我想让regexp保持简单。也许把它作为一个单独的答案发布?@非常感谢,这正是我想要的。我也有像圣加仑这样的城市,那里的strtrim不起作用。好吧,如果是这样的话,你需要添加。对于角色集?:[A-Z][A-Z]*?:['-.]+[A-Za-Z]+*@我认为它应该是\。无论如何,问题是数字中的点也会被错误地识别为城市名称。迈克,我们能保证城市名称中的点后面总是跟一个空格吗?我根据这一点编辑了我的答案
>> myText = 'San Francisco 2.7  Newcastle upon Tyne  3.8  Carmel-by-the-sea 0.9    L''Aquila 2.8  St. Gallen';
>> result = strtrim(regexp(myText, '([a-zA-Z\- '']|\. )+', 'match'))  
result =
  1×5 cell array
    {'San Francisco'}    {'Newcastle upon Tyne'}    {'Carmel-by-the-sea'}    {'L'Aquila'}    {'St. Gallen'}