我试图在没有双引号的情况下替换名称中不必要的双引号。现在,我知道名称但我希望代码是动态的。任何建议都非常感谢。
$FilePath = "C:\Test\"
Get-ChildItem $FilePath -Filter | ForEach-Object {
(Get-Content $_.FullName -Raw) | Foreach-Object {
$_ -replace ',"Frederick "Fred"",' , ',"Frederick Fred",' `
-replace ',"Brian "Josiah"",' , ',"Brian Josiah",' `
-replace ',""",' , ',"",'
} | Set-Content $_.FullName
}
uj5u.com热心网友回复:
使用正则表达式:
# Sample input
$str = '"Frederick "Fred"","Brian "Josiah"",""""'
$str -replace '(?m)(?<=,|^)"([^,"]*)"([^,"]*)""(?=,|$)', '"$1$2"'
输出:
"Frederick Fred","Brian Josiah",""
有关正则表达式的解释和试验它的机会,请参阅此 regex101.com 页面(请注意,"
链接页面上的字符被转义为\"
,因为整个正则表达式都包含在 中"..."
,与 中 不同'...'
,如上所述) .
uj5u.com热心网友回复:
这是一种摆脱不需要的双引号的方法,该双引号不使用 [我们中的某些人的思维融化] 正则表达式。[咧嘴笑]
代码 ...
$TwoDoubleQuotes = '""'
$OneDoubleQuote = '"'
$SpaceDQ = ' "'
$Space = ' '
$InString = '"Frederick "Fred"","Brian "Josiah"",""""'
$OutString = $InString.Replace($TwoDoubleQuotes, $OneDoubleQuote).Replace($SpaceDQ, $Space)
$InString
$OutString
输出 ...
"Frederick "Fred"","Brian "Josiah"",""""
"Frederick Fred","Brian Josiah",""
代码做什么...
- 定义了一些非常简单的常量
字符串模式对我来说很难阅读,所以这绕过了它。[咧嘴笑] - 定义入站字符串
-
将替换with的
.Replace()
字符串方法链接起来,然后仅用 a替换。2xDQ
1xDQ
SpaceDQ
Space
- 将新字符串保存到 $Var
- 显示新旧字符串以供您观看
0 评论