我想使用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,'''','');
这似乎让我得到了想要的东西,但是我想知道如何在第一种方法中更改正则表达式。
非常感谢。
答案 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'