Matlab: заменить строку на регулярное выражение, вставив части текущего соответствия - PullRequest
0 голосов
/ 26 июня 2018

У меня есть строка в формате:

a = '{header:Header { length: 3, number: two, month: april }, holiday : summerholiday {holiday:france}}'

В этой строке я хочу использовать функцию jsondecode Matlab, поэтому мне нужно, чтобы строка была в следующем формате:

a_desired = '{"header": {"length":"3", "number":"two", "month":"april"}, "holiday": {"holiday" : "france"}}'

Мне нужно удалить каждое слово в строке, за которым следует : word { (в качестве заголовка и летнего праздника).

Моя идея:

a = '{header:Header {length:3, number:two, month:april}, holiday : summerholiday: {holiday : france}}';
exp = '\w*:\w* {';
str_json = regexprep(a, exp, '$&' ); 
// nothing changes, because I insert the same string I want to replace

Как можно вставить только части текущего регулярного выражения вместо вставки части отверстия входного текста, который в настоящее время совпадает?

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете получить желаемый результат в два этапа.

1. Удалить ненужные слова из строки.

a_desired = regexprep(a,'(:)\s?[a-zA-Z]*\s*({)','$1 $2')

Объясненное регулярное выражение:

  • (:) Подберите точку с запятой и захватите ее.

  • \s?[a-zA-Z]* При необходимости укажите пробел, за которым следует слово.

  • \s* Соответствует любому пробелу

  • ({) Подберите открывающую скобку и захватите ее во вторую группу.

Соответствующие шаблоны заменяются $1, первой захваченной группой, пробелами, и $2, второй захваченной группой.

2. Оберните каждое слово в двойные кавычки.

a_desired = regexprep(a_desired,'(\w*)','"$1"')

  • (\w*) Подберите любое слово и поймайте его.

Соответствующие шаблоны заменяются захваченной группой $ 1, заключенной в символы двойных кавычек.

Окончательный вывод:

a_desired = '{"header": {"length":"3", "number":"two", "month":"april"}, "holiday": {"holiday" : "france"}}'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...