我在文件中有以下文本。
BEGIN
BLOCK "StringFileInfo"
BEGIN
BEGIN
VALUE "CompanyName", "MyCompany"
VALUE "FileDescription", "MyFile"
VALUE "FileVersion", "1.0.0.0"
VALUE "InternalName", "Something.exe"
VALUE "LegalCopyright", "MyCopyright "
VALUE "OriginalFilename", "Something.exe"
VALUE "ProductName", "MyProduct"
VALUE "ProductVersion", "1.0.0.0"
END
END
END
我需要用其他一些字符串将FileVersion替换为该行。要找到该行,我正在使用以下正则表达式,但找不到它。
"(^\s*VALUE\s*`"FileVersion`",\s*)`"[0-9]+,\s*[0-9]+,\s*[0-9]+,\s*[0-9]+`"$"
有什么主意在这里吗?
PS:不确定是否重要,但是在here中发布了我要使用的完整脚本。
答案 0 :(得分:1)
如Wiktor所述,您需要在RegEx中用逗号替换逗号。这应该起作用:
"(^\s*VALUE\s*`"FileVersion`",\s*)`"[0-9]+\.\s*[0-9]+\.\s*[0-9]+\.\s*[0-9]+`"$"
或者为了简化脚本的整个部分(使用后视和前瞻,以及将FileVersion和ProductVersion匹配组合为一个匹配的选项组),这也应该工作:
(Get-Content $file) -replace '(?<=^\s*"(FileVersion|ProductVersion)",\s*")\d+\.\d+\.\d+\.\d+(?=")', $rc_version -replace '(?<=^\s*VALUE\s*"(FileVersion|ProductVersion)",\s*")\d+\.\d+\.\d+\.\d+(?=")', $rc_version_spaced | Set-Content $file
答案 1 :(得分:1)
该 script 在到达正则表达式之前先对目标进行一些替换。
要匹配“版本”行,请使用类似以下内容:
(?mi)^[ \t]*value[ \t]+"fileversion"[ \t]*,[ \t]*"([0-9]+(?:\.[0-9]+)*)"[ \t]*$
https://regex101.com/r/a8cJ4n/1
更多信息
(?mi) # Inline modifiers; multi-line, case insensitive
^ # BOL
[ \t]* value [ \t]+ # VALUE
"fileversion" [ \t]* , [ \t]* # FILEVERSION
"
( # (1 start), Version numbers
[0-9]+
(?: \. [0-9]+ )*
) # (1 end)
"
[ \t]*
$ # EOL