Matlab: использование регулярного выражения для получения строки с пробелами между - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу использовать Regex для получения некоторых идентификаторов в массиве строк, массив выглядит следующим образом:

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

Мой шаблон для регулярных выражений выглядит следующим образом:

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

IЯ хотел бы получить идентификатор под названием «HON WI», но с моим текущим шаблоном, он разбит на две части, потому что мой шаблон не может правильно работать с пробелами.Я хотел бы получить весь "HON WI", а также другие мои строки, все, что находится в '', у них могут быть специальные символы, такие как ^,.или _, но я не знаю, как добавить пробел.

Я уже пробовал подобные вещи, но безуспешно:

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

Мой новый массив должен содержать в каждой ячейке строки / идентификаторы, содержащиеся в myString (US04650Y1001, US90274P3029, HON WI иUS41165F1012) с размерами 1x4.

Другой подход, который, кажется, работает, но не совсем уверен:

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

Это, кажется, дает мне то, что я хочу, но я хотел бы знать, как я могуизмените регулярное выражение в моем первом подходе.

Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете использовать альтернативные утверждения.Следующее будет соответствовать любой строке, состоящей из буквенно-цифрового символа или символа подчеркивания (\w), пробела ('') или символов . или ^, который расположен между кавычками.Это, в частности, исключит пустое пространство рядом с запятой в разделении между токенами, т. Е. ', ' не дает совпадения.

Обратите внимание, что \s будет соответствовать любому символу пробела (включая символ табуляции и новой строки)), поэтому здесь предпочтительнее пробел:

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

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

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

  ans = 

      'US04650Y1001'
      'US90274P3029'
      'HON WI'
      'US41165F1012'
0 голосов
/ 28 ноября 2018

Вы можете использовать просто '([^']+)' регулярное выражение и использовать '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'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...