我正在尝试在字符串中搜索一些数字,并在每个数字之前插入一个新行,不包括第一个数字。
我似乎无法使用传统的正则表达式 \n char 来插入换行符。如果我使用 PowerShell 转义字符,则该集中的正则表达式变量将被忽略。
对于给定的源字符串
$theString = "1. First line 2. Second line 3. Third line"
Run Code Online (Sandbox Code Playgroud)
我想要的是:
1. 第一行 2. 第二线 3.第三行
所以我尝试使用这个正则表达式来查找数字 2 到 9,后跟句点和空格:
$theString = $theString -replace '([2-9]\. )','\n$1'
Run Code Online (Sandbox Code Playgroud)
但这会产生:
1. 第一行\n2. 第二行\n3. 第三线
所以我尝试使用 PowerShell 转义字符作为换行符并将其放在双引号内:
$theString = $theString -replace '([2-9]\. )',"`n$1"
Run Code Online (Sandbox Code Playgroud)
但这会产生:
1. 第一行 第二行 第三线
我尝试使用\r、\r\n、\`r、\`r\`n等尝试强制换行,但无法在不失去包含当前正则表达式变量的能力的情况下实现换行。
该问题是由于$用于普通 Powershell 变量和捕获组而引起的。为了将其作为捕获组标识符进行处理,'需要单引号。但单引号告诉 Powershell 不要将换行转义解释为换行而是字面量`n。
连接两个不同引用的字符串就可以了。就像这样,
$theString -replace '([2-9]\. )', $("`n"+'$1')
1. First line
2. Second line
3. Third line
Run Code Online (Sandbox Code Playgroud)
作为替代方案,请使用双引号"并转义美元。就像这样,
$theString -replace '([2-9]\. )', "`n`$1"
1. First line
2. Second line
3. Third line
Run Code Online (Sandbox Code Playgroud)
另一种替代方案(感谢 Lieven)使用here-string。这里的字符串包含一个换行符。也许变量使它更容易使用。就像这样,
$repl = @'
$1
'@
$theString -replace '([2-9]\. )', $repl
1. First line
2. Second line
3. Third line
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |