Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:使用regexp获取中间有空格的字符串_Regex_Matlab - Fatal编程技术网

Matlab:使用regexp获取中间有空格的字符串

Matlab:使用regexp获取中间有空格的字符串,regex,matlab,Regex,Matlab,我想使用正则表达式获取cellstring数组中的一些ID,该数组如下所示: myString = '(['US04650Y1001', 'US90274P3029', 'HON WI', 'US41165F1012'])'; 我的正则表达式模式如下: pattern = '[A-Za-z0-9.^_]+'; newArr = regexp(myString, pattern,'match'); 我想得到一个名为“HON-WI”的ID,但根据我当前的模式,它会将其一分为二,因为我的模式无法正

我想使用正则表达式获取cellstring数组中的一些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]+';
我的新数组应该在每个单元格中包含myString(US04650Y1001、US90274P3029、HON WI和US41165F1012)中包含的字符串/ID,尺寸为1x4

另一种似乎有效但不完全确定的方法:

myString = strrep(myString,'([','');
myString = strrep(myString,'])','');
myString = regexp(myString,',','split');
myString = strrep(myString,'''','');
这似乎满足了我的需求,但我想知道如何在第一种方法中修改正则表达式

非常感谢

您可以仅使用
'([^']+)
regex并使用
'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'
}

您可以选择使用lookaround断言。以下内容将匹配由字母数字字符或下划线(
\w
)、空格(“”)或位于引号之间的字符
^
组成的任何字符串。这将具体排除逗号旁边的空白空间,在令牌之间的分隔,即<代码>,'< /> >不给出匹配。

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

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

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

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

  ans = 

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

pattern2=”(?谢谢Wiktor。这也适用于特殊字符,如“^”、“,-”等吗?我使用的一些字符串有这些特殊字符,我的模式覆盖得很好。但我不确定这一个是否适用。@AquilesPáez
”[^']+“
匹配一个
,然后将
以外的一个或多个字符捕获到组1中,然后匹配一个
。因此,您可以看到
[^']
,一个否定字符类,可以匹配两个单引号之间的任何字符。再次感谢Wiktor。正则表达式确实是一门需要时间才能掌握的技能。