Matlab:使用regexp获取中间有空格的字符串
我想使用正则表达式获取cellstring数组中的一些ID,该数组如下所示: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,但根据我当前的模式,它会将其一分为二,因为我的模式无法正
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。正则表达式确实是一门需要时间才能掌握的技能。