Regex 如何使用powershell替换各行的第一部分和最后一部分
我想使用PowerShell修改文本文件 我想-替换:Regex 如何使用powershell替换各行的第一部分和最后一部分,regex,powershell,replace,Regex,Powershell,Replace,我想使用PowerShell修改文本文件 我想-替换: [将每行开头的替换为享受 LINE]在每行末尾加上LIFE 仅当该行以[REPLACE开头,以行结尾时] 在-replace中使用什么正则表达式来匹配此请求? 示例-文件输入 示例-文件输出 如您所见,在本例中,只有第2行和第4行发生了更改 我想出了这个匹配字符串的方法:-match“^\[REPLACE.*LINE\]$”但我不知道如何使用-REPLACE正确地替换…我认为您需要使用“^”来验证行的开头,而“$”将处理行的结尾。我已经
替换为享受[将每行开头的
在每行末尾加上LINE]
LIFE
- 仅当该行以
开头,以[REPLACE
行结尾时]
-match“^\[REPLACE.*LINE\]$”
但我不知道如何使用-REPLACE
正确地替换…我认为您需要使用“^”来验证行的开头,而“$”将处理行的结尾。我已经用Java编写了一段代码,但是您可以使用这个正则表达式
String input="[REPLACE_IN_THIS_LINE]"
Pattern Pat=Pattern.compile(("^(\\[REPLACE)(.)*(LINE\\])$"));
Matcher Mat=Pat.matcher();
if(Mat.find())
{
input=input.replace("[REPLACE","Enjoy").replace("LINE]","Life")
}
您必须调用replace 2次,每个要替换的字符串调用一次,考虑到您使用循环访问每一行,您必须执行以下操作:
$ResultText = $line.replace("[REPLACE","ENJOY").replace("LINE]","LIFE")
<> > >编辑:< /强>我误解了这个问题,我不认为你可以在文本中间有“替换”。试试下面的:
'[REPLACE_IN_THIS_LINE][REPLACE' -replace '^\[REPLACE(.*?)', 'ENJOY$1'
然后:
'[REPLACE_IN_THIS_LINE][REPLACE_LINE]' -replace '(.+?)LINE\]$', '$1LIFE'
正如您所看到的,第一个只替换第一个“[replace”,第二个只替换第一个“LINE]”尝试以下操作:
Get-Content "C:\temp\test.txt" |%{
if ($_ -like 'ENJOY*LIFE')
{
"[REPLACE{0}LINE]" -f $_.Substring(5, $_.Length -9)
}
else
{
$_
}
} | Set-Content "c:\temp\result.txt"
使用组占位符(例如,$1
),例如:
只需尝试字符串替换函数 就像在爪哇一样
String inputValue="[REPLACE_IN_THIS_LINE]".replaceAll("[REPLACE","Enjoy").replaceAll("LINE]","Life");
post regex你现在是using@stetoc我刚刚添加了-match
-match“^\[REPLACE.*LINE\]$”的用法
但我不知道如何将其转换为-replace
以便能够只替换第一部分和最后一部分,而保留中间部分……如果我理解正确,您可以分两步来解决此问题:1.检查字符串是否与模式匹配2.替换需要替换的内容。是的,我尝试使用此解决方案解决此问题。这不正确。这将替换每个[replace
和行]
,这不是我想要做的。无论如何,感谢您的回答。@JasminStarvors抱歉,我已经编辑了我的答案,请查看是否是您需要的。问候
Get-Content "C:\temp\test.txt" |%{
if ($_ -like 'ENJOY*LIFE')
{
"[REPLACE{0}LINE]" -f $_.Substring(5, $_.Length -9)
}
else
{
$_
}
} | Set-Content "c:\temp\result.txt"
# $a = Get-Content .\Input.txt
$a = "[REPLACE_IN_THIS_LINE]",
"[DO_NOT_REPLACE_IN_THIS_LINE_PLEASE]",
"[REPLACE_VERY_MUCH_IN_THIS_LINE]",
"Do not replace in this line[REPLACE_IN_THIS_LINE]"
$a -Replace '^\[REPLACE(.*)LINE\]$', 'ENJOY$1LIFE'
String inputValue="[REPLACE_IN_THIS_LINE]".replaceAll("[REPLACE","Enjoy").replaceAll("LINE]","Life");