Форматирование файлов JSON с использованием Python RegEx - PullRequest
0 голосов
/ 13 мая 2019

Итак, у меня есть несколько наборов данных json, и часть, с которой я имею дело, выглядит следующим образом.

"transcriptionData": {
               "content": "[lang:Foreign] Air Force [/lang:Foreign ...[lang:Foreign] target [/lang:Foreign] ..."
            }

Под содержанием мы имеем [иностранный язык]. Однако это не всегда так. В моем наборе данных есть много строк, которые неправильно отформатированы. Например, [/ lang: F, [lang.Foreign], M.L.A.lang: иностранный], [lang: Foreing], Lang: Foreign], [langForeign], [l / ang: Foreign].

Правильный результат должен выглядеть следующим образом. Когда язык меняется, начало должно выглядеть как < lang: Foreign >, а когда перевод заканчивается, оно должно заканчиваться < /lang: Foreign >

Я пробовал это следующим образом.

trans = re.sub(r'\[(lang[^\[\]]*)\]', r'<\1>', trans)

, который работает некоторое время, но не все время. Например, если строка Lang: Foreign], я хочу иметь открывающие скобки, а также <>.

trans = re.sub(r'\[/(lang[^\[\]]*)\]', r'</\1>', trans)

Я тоже это пробовал, но не работал все время.

Правильный результат должен выглядеть как < lang: Foreign > и < /lang: Foreign >. Пожалуйста, дайте мне знать, если есть какие-либо предложения.

1 Ответ

0 голосов
/ 13 мая 2019

Вы можете изменить свое регулярное выражение, чтобы также отследить некоторые крайние случаи для вас, но он не собирается исправлять каждую возможную опечатку, если данные плохо отформатированы.Особенно, если в нем отсутствуют закрывающие или открывающие скобки, нет никакого способа для

Начните с вашего, он может успешно получить lang: что угодно или lang.whither: \[(lang[^\[\]]*)\]

Затем добавьте проверку на поддельныесимволы перед открытием [скобка [^[]*\[(lang[^\[\]]*)\]

Затем сделайте открытие [скобка необязательным [^[]*\[?(lang[^\[\]]*)\]

Затем добавьте проверку на наличие поддельных символов после открытия [скобка [^[]*\[?[^\/]*(lang[^\[\]]*)\]

Наконец,если закрывающая скобка отсутствует], остановитесь на пробеле [^[]*\[?[^\/]*(lang[^\[\]]*)\][\]|\s]

Вот, пожалуйста, https://regex101.com/r/tuaPl3/1

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