Matlab:使用regexp来获得一个字符串,该字符串之间有一个空格

时间:2018-11-27 22:34:23

标签: regex matlab

我想使用Regex来获取单元串数组中的一些ID,该数组如下所示:

myString = '(['US04650Y1001', 'US90274P3029', 'HON WI', 'US41165F1012'])';

我的正则表达式模式如下:

pattern = '[A-Za-z0-9.^_]+';
newArr = regexp(myString, pattern,'match');

我想获得一个名为“ HON WI”的ID,但是对于我当前的模式,由于我的模式无法正确处理空白,因此将其分成两个部分。我想获取整个“ HON WI”以及我的其他字符串(包括”中的所有内容),这些字符可能具有特殊的字符,例如^ 、。或_,但我不知道如何添加空格。

我已经尝试过类似的尝试,但没有成功:

pattern = '[A-Za-z0-9.^_\s]+';

我的新数组在每个单元格中应包含尺寸为1x4的myString(US04650Y1001,US90274P3029,HON WI和US41165F1012)中包含的字符串/ ID。

另一种似乎可行但不确定的方法:

myString = strrep(myString,'([','');
myString = strrep(myString,'])','');
myString = regexp(myString,',','split');
myString = strrep(myString,'''','');

这似乎让我得到了想要的东西,但是我想知道如何在第一种方法中更改正则表达式。

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以仅使用'([^']+)'正则表达式并使用'tokens'来获取捕获结果:

myString = '([''US04650Y1001'', ''US90274P3029'', ''HON WI'', ''US41165F1012''])';
pattern = '''([^'']+)''';
newArr = regexp(myString, pattern,'match', 'tokens');

newArr看起来像

{
  [1,1] = 'US04650Y1001'
  [1,2] = 'US90274P3029'
  [1,3] = 'HON WI'
  [1,4] = 'US41165F1012'
}

答案 1 :(得分:1)

您可能的选择是使用环视断言。以下内容将匹配位于引号之间的任何由字母数字字符或下划线(\w),空格('')或字符.^组成的字符串。在令牌之间的分隔中,这将特别排除逗号旁边的空格,即', '不匹配。

请注意,\s将匹配任何空格字符(包括制表符,换行符),这就是为什么在此处首选空格的原因:

pattern2='(?<='')[\w.^ ]+(?='')';

  pattern2 =
  (?<=')[\w.^ ]+(?=')

newArr = regexp(myString, pattern2,'match');
newArr'

  ans = 

      'US04650Y1001'
      'US90274P3029'
      'HON WI'
      'US41165F1012'