Python заменить специальную группу строк с помощью регулярных выражений - PullRequest
0 голосов
/ 11 марта 2019

В настоящее время мой проект работает на .net C # с версией 4.5.0 framework. Который также интегрирован, чтобы использовать IronPython для выполнения некоторых скриптов Python. Теперь я ищу замену некоторого специального текста из строки другим, например,

PV1 | 1 | ?? | ?? ^^^ ?? ^^^ ?? ||||| ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? | ?? ^ ?? ^ ?? ^? ? ^^ ?? ^^^ ?? ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ^ ?? ^^ ?? ^^^ ?? ^ ?? ^^? ? ^^^ ^^^ ?? ?? ?? ^^^ ^ ?? ^^^ ^^^ ?? ??? ?? ^ ^^^ ?? ^ ?? ^^^ ^^^ ??? ? ^^ ?? ^^^ ?? ^ ?? ^^ ?? ^^^ ^^^ ?? ?? ?? ^^ ^^^ ?? | ?? |||||| ?? ^^^ . ^^^ | ?? || ?? ||||||||||||||||||| ?? || ?? ||| ?? ||||||

ORC | ?? || ?? |||||| ?? | ^ ?? ^^^ ?? ^^^^ ??

OBR | 1 | ?? ^ ?? | ?? ^ ?? | ?? ^^^ * ?? ||| ?? | ?? |||||||||||||| ? || ?? | ?? ||||||| ?? |

ZDS | ?? | ^ TEST ^ ONLY (TESTONLY) ^^^ ПОДДЕРЖКА TEST ^^^^ TEST | ?? | ЗАВЕРШЕНО

OBX | 1 | ?? | ?? ^ ??

текст сверху Я хочу заменить строку для ZDS | ??, на OBX | 1 | ?? с остальной частью строки, доступной в ZDS, для добавления в OBX. Также необходимо сохранить, если какая-либо строка OBX доступна в тексте как оригинальный OBX.

Я попробовал ниже в Iron Python

import re

regEx = re.compile('^ZDS\|([^|]+)\|([^|]+)\|([^|]+)\|([^|\n\r ]+)')
Message = regEx.sub('OBX|1|FT|||\1~\2~\3~\4|||', Message)

Также

Message = re.sub(r'^ZDS\|([^|]+)\|([^|]+)\|([^|]+)\|([^|\n\r ]+)', 'OBX|1|FT|||\1~\2~\3~\4|||', Message, count=1)

и

Message= str.replace(Message, '^ZDS\|([^|]+)\|([^|]+)\|([^|]+)\|([^|\n\r ]+)','OBX|1|FT|||\1~\2~\3~\4|||')

Но все вышеперечисленные варианты не сработали.

Я хотел вывод как

PV1 | 1 | ?? | ?? ^^^ ?? ^^^ ?? ||||| ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? | ?? ^ ?? ^ ?? ^? ? ^^ ?? ^^^ ?? ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ?? ^^ ?? ^^^ ?? ~ ?? ^ ?? ^ ?? ^ ?? ^^ ?? ^^^ ?? ^ ?? ^^ ?? ^^^ ?? ^ ?? ^^? ? ^^^ ^^^ ?? ?? ?? ^^^ ^ ?? ^^^ ^^^ ?? ??? ?? ^ ^^^ ?? ^ ?? ^^^ ^^^ ??? ? ^^ ?? ^^^ ?? ^ ?? ^^ ?? ^^^ ^^^ ?? ?? ?? ^^ ^^^ ?? | ?? |||||| ?? ^^^ . ^^^ | ?? || ?? ||||||||||||||||||| ?? || ?? ||| ?? ||||||

ORC | ?? || ?? |||||| ?? | ^ ?? ^^^ ?? ^^^^ ??

OBR | 1 | ?? ^ ?? | ?? ^ ?? | ?? ^^^ * ?? ||| ?? | ?? |||||||||||||| ? || ?? | ?? ||||||| ?? |

OBX | 1 | FT ||| ^ ТЕСТ ^ ТОЛЬКО (ТЕСТОНЛИ) ^^^ ПОДДЕРЖКА ТЕСТА ^^^^ ТЕСТ ~ ?? ~ ЗАВЕРШЕНО

OBX | 1 | ?? | ?? ^ ??

1 Ответ

0 голосов
/ 12 марта 2019

Наконец-то я получил ответ на свой вопрос. Исходное сообщение: Message =

PV1|1|??|??^^^??^^^??|||||??^??^??^??^^??^^^??~??^??^??^??^^??^^^??~??^??^??^??^^??^^^??|??^??^??^??^^??^^^?? ??~??^??^??^??^^??^^^?~??^??^??^??^^??^^^??~??^??^??^??^^??^^^??~??^??^??^??^^??^^^??~??^??^??^?? ??^^??^^^??~??^??^??^??^^??^^^??^??^^??^^^??^??^^??^^^??^^^??^^^??^??^^^??^^^???^??^^^??^??^^^??^^^??^^??^^^??^??^^??^^^??^^^??^^??^^^??|??||||||??^^^.^^^|??||??|||||||||||||||||||??||??|||??||||||

ORC|??||??||||||??|^??^^^??^^^^??

OBR|1|??^??|??^??|??^^^* ??|||??|??||||||||||||||??||??|??|||||||??|

OBX|1|FT|||^TEST^ONLY (TESTONLY)^^^TEST SUPPORT^^^^TEST~??~COMPLETED

OBX|1|??|??^??

и на Python

import re

Message = re.sub(r'ZDS\|([^|]+)\|([^|]+)\|([^|]+)\|([^|\n\r ]+)', 'OBX|1|FT|||'+r'\1~\2~\3~\4|||', Message, count=1)
Message = re.sub(r'ZDS\|([^|]+)\|([^|]+)\|([^|]+)\|([^|\n\r ]+)', 'OBX|1|FT|||$1~$2~$3~$4|||', Message, count=1)
...