-1

У меня есть список элементов в текстовом файле, которые выглядят так:

Masterfile="DM.xml" Doc-Name="PCP0001 Protocol" group="FP Team"
Masterfile="DM.xml" Doc-Name="PCR0001 Report" group="FP Team"
Masterfile="DM.xml" Doc-Name="DCR0002 Review" group="FP Team"

Я хотел бы расширить среднюю часть, чтобы она выглядела так:

Masterfile="DM.xml" Doc="http://1.1.1.1/PCP0001.Protocol.doc" Doc-Name="PCP0001 Protocol" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/PCR0001.Report.doc" Doc-Name="PCR0001 Report" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/DCR0002.Review.doc" Doc-Name="DCR0002 Review" group="FP Team"

Другими словами, я хочу использовать Doc-Name и добавить URL перед ним и заменить пробелы на «.».

Может кто-то помочь мне с этим? У меня есть буквально 900 таких.

Вот что я попробовал в NotePad++:

Я использовал это выражение Find:

Doc-Name=[^"]*"([^"]+)"[^"]

И использовал это выражение Заменить:

Doc="http://1.1.1.1/$1.doc" Doc-Name="$1" 

Это дало мне 90%, но не совсем. Я не знаю, как заменить пробелы в пределах 1 доллара точками. Это закончит работу, и мне нужна помощь здесь.

2 ответа2

1

Вот способ, который работает, если есть более одного пробела:

  • Ctrl+H
  • Найти что: Doc-Name="([^"\h]+)\h+([^"\h]+)(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?"
  • Замените на: Doc="http://1.1.1.1/$1.$2(?3.$3:)(?4.$4:)(?5.$5:)(?6.$6:).doc" $0
  • проверить обернуть
  • проверьте регулярное выражение
  • Заменить все

Объяснение:

Doc-Name="          : literally
([^"\h]+)           : group 1, 1 or more any character that is not a double quote or horizontal space
\h+                 : 1 or more horizontal space
([^"\h]+)           : group 2, 1 or more any character that is not a double quote or horizontal space
(?:                 : non capture group
  \h+               : 1 or more horizontal space
  ([^"\h]+)         : group 2, 1 or more any character that is not a double quote or horizontal space
)?                  : end group, optional
(?:\h+([^"\h]+))?   : same as above
(?:\h+([^"\h]+))?   : same as above
(?:\h+([^"\h]+))?   : same as above
....... as many as you need
"                   : double quote

Замена:

Doc="http://1.1.1.1/    : literally
$1                      : content of group 1
.                       : a dot
$2                      : content of group 2
(?3.$3:)                : conditional replacement, if group 3 exists replace by itself preceded with a dot
(?4.$4:)                : same as above for group 4
(?5.$5:)                : same as above for group 5
(?6.$6:)                : same as above for group 6
....... as many as you need
.doc"                   : literally
$0                     : a space then content of group 0 (ie. the whole match)

Учитывая вход как:

Masterfile="DM.xml" Doc-Name="PCP0001 Protocol abc def ghi jkl" group="FP Team"
Masterfile="DM.xml" Doc-Name="PCR0001 Report xyz" group="FP Team"
Masterfile="DM.xml" Doc-Name="DCR0002 Review" group="FP Team"

Результат:

Masterfile="DM.xml" Doc="http://1.1.1.1/PCP0001.Protocol.abc.def.ghi.jkl.doc" Doc-Name="PCP0001 Protocol abc def ghi jkl" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/PCR0001.Report.xyz.doc" Doc-Name="PCR0001 Report xyz" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/DCR0002.Review.doc" Doc-Name="DCR0002 Review" group="FP Team"
-1

Разобрался .... лол

Как заметил barlop (спасибо), эта проблема становится проще, если разбить ее на несколько шагов.

Шаг 1. Добавьте компонент Doc = "URL", как описано в OP

Шаг 2. Это многоступенчатый

Найти: Doc =(\". )\S (..Doc")

Заменить: Doc =\1.\2

Используйте replace all в NotePad++, но используйте его столько раз, сколько необходимо, чтобы заменить все пробелы.

СДЕЛАННЫЙ!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .