我一直在阅读大量材料,并认为我找到了解决方案,但没有运气。我需要找到名称中包含的撇号,然后用双引号替换它们。我正在将一个文件加载到一个数组中,然后循环遍历它,寻找撇号。问题是每一行可以有几个撇号,这就是为什么它不是一个简单的查找和替换。
这是该文件的示例:
create(xxxxxxx)using(xxxxxxx)name('O'Doe, John')
replace(xxxxxxx)instdata('ab 1234 ')
create(xxxxxxx)using(xxxxxxx)name('Doe, O'Jane')
replace(xxxxxxx)instdata('ab 5678 ')
中间还有其他行,但它们不包含撇号。
这是我到目前为止所拥有的:
$Pattern = "[A-Z]'[A-Z]"
$user = gc C:\Temp\mfnewuser.ins
for ($i = 0; $i -lt $user.count; $i++) {
if ($user[$i] -match $Pattern) {
$user[$i] = [regex]::replace($strText, $Pattern.substring(2,1), "''")
$user | out-file C:\Temp\mfnewuser.ins
}
}
我正在寻找一个大写字母,然后是撇号,然后是另一个大写字母。由于其他逗号,我不能只进行全局替换。我知道我的模式匹配正在工作,但我似乎无法使用子字符串来操作它。子字符串将 $Pattern 视为字符串而不是正则表达式的结果。如果我可以将正则表达式结果保存到变量中,那就太好了。我认为那么替换将很容易。
也试过这个,但也没有运气:
$Pattern = "[A-Z]'[A-Z]"
$NewPattern = "[A-Z]''[A-Z]"
$f = Get-Content C:\Temp\mfnewuser.ins
$f = $f -replace $Pattern, $NewPattern
$f | out-file C:\Temp\mfnewuser.ins
我可能正在接近这一切都是错误的,有一种更简单的方法,但我还没有看到任何东西。
编辑: 基于下面的 Bill_Stewarts 示例,我已经将其用于名字但尚未用于姓氏:
$Pattern = "[A-Z]'[A-Z]"
$user = gc C:\Temp\mfnewuser.ins
for ($i = 0; $i -lt $user.count; $i++) {
if ($user[$i] -match $Pattern) {
$user[$i] = $user[$i] -replace "(.*[A-Z])'([A-Z]+.*)", "`$1''`$2"
$user | out-file C:\Temp\mfnewuser.ins
}
}