查找并替换具有重复变量的表达式?

查找并替换具有重复变量的表达式?

我有一个文本文件中的项目列表,如下所示:

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++ 中尝试过的:

我使用了这个查找表达式:

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

并使用了这个替换表达式:

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

这让我完成了 90%,但还不够。我不知道如何用句号替换 $1 内的空格。这将完成工作,我需要一些帮助。

答案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
  • 检查环绕
  • 检查正则表达式
  • Replace all

解释:

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"

答案2

明白了....哈哈

正如 barlop 指出的那样(感谢),将这个问题分解成几个步骤后就更容易了。

步骤 1. 按照 OP 中的说明添加 Doc="URL" 组件

第 2 步。这是一个多步骤

查找:Doc=(\".)\s(..doc 文件”(英文)

替换:Doc=\1.\2

使用 NotePad++ 下的全部替换,但根据需要多次使用它来替换所有空格。

完毕!

相关内容